gpt4 book ai didi

java - 将 UTF-8 转换为字符串

转载 作者:行者123 更新时间:2023-11-30 08:41:27 26 4
gpt4 key购买 nike

我尝试了很多来自 Stack Overflow 的解决方案,但都无法解决问题。我有一个值为 title 的 JSON 对象,采用 UTF-8 格式,我需要将其转换为 Java 字符串:

{"id":"118","title":"\u00c7\u00c0\u00c7"}

我最终采用了这种方法,但它不起作用:

String title = new String(JsonObj.getString("title").getBytes(), "US-ASCII"); 

String title = new String(JsonObj.getString("title").getBytes());

英文标题正确显示为 Wartburg、Wiesmann、Xin Kai。俄语显示为 ÂÀÇ、Âåëòà、ÃÀÇ

有什么问题,如何将其转换为正常字符?

编辑:

这是我接收 JSON 的方式

 JSONObject jsonObject = new JSONObject();

try {

// sending empty JSON in this request
String jsonRequest = jsonObject.toString();
Log.v(LOG_TAG, "JSON: " + jsonRequest);

URL url = new URL(STRING_URL);

urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("POST");

// hashing the signature
String md5Signature = MD5Utils.md5Apache(KEY + jsonRequest);

// setting heading property
urlConnection.setRequestProperty(AA_SIGNATURE, md5Signature);

urlConnection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream());
wr.writeBytes(jsonRequest);
wr.flush();
wr.close();

// read the inputshtream into the String
InputStream inputStream = urlConnection.getInputStream();

if (inputStream == null) {
// nothing to do
return null;
}

reader = new BufferedReader(
new InputStreamReader(inputStream));

String inputLine;
StringBuffer buffer = new StringBuffer();

while ((inputLine = reader.readLine()) != null) {
buffer.append(inputLine);
}

if (buffer.length() == 0) {
// Stream was empty
return null;
}

// String buffer
String responseJsonStr = buffer.toString();
Log.v(LOG_TAG, "Final String buffer: " + responseJsonStr);


// trying to parse json string and return result
try {
return getCarBrandsOrModelsFromJson(responseJsonStr);
} catch (JSONException e) {
e.printStackTrace();
}


} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {

if (urlConnection != null) {
urlConnection.disconnect();
}

if (reader != null) {
try {
reader.close();
} catch (IOException e) {
Log.e(LOG_TAG, "Error closing stream");
}
}
}
return null;
}

我是这样解析的

 private HashMap<String, Integer> getCarBrandsOrModelsFromJson(String carBrandsOrModelsJsonStr) throws JSONException {

// these are the names of JSON objects needed to be extracted
final String AA_DATA = "data";
final String AA_TITLE = "title";
final String AA_ID = "id";

JSONObject carBrandsJson = new JSONObject(carBrandsOrModelsJsonStr);
JSONArray brandsArray = carBrandsJson.getJSONArray(AA_DATA);

HashMap<String, Integer> carBrandsMap = new HashMap<String, Integer>();

for (int i = 0; i < brandsArray.length(); i++) {

String brand = null;
Integer id;

// Get the JSON object representing the one brand
JSONObject oneBrandJson = brandsArray.getJSONObject(i);

// getting brand and id

// ===================>>> ?
brand = new String(oneBrandJson.getString(AA_TITLE).getBytes(), "UTF8");
// brand = oneBrandJson.getString(AA_TITLE);
brand = oneBrandJson.getString(AA_TITLE);

id = oneBrandJson.getInt(AA_ID);

// adding brand and id into hashmap
carBrandsMap.put(brand, id);
}

// Logging result
for (Map.Entry<String, Integer> entry : carBrandsMap.entrySet()) {
Log.v(LOG_TAG, ("\n" + entry.getKey() + " / " + entry.getValue()));
}

return carBrandsMap;
}

最佳答案

下面的代码将 Unicode 转换为 UTF-8。

String original = JsonObj.getString("title");
try {
byte[] utf8Bytes = original.getBytes("UTF-8");
String roundTrip = new String(utf8Bytes, "UTF-8");
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

编辑:

您的 Unicode 字符串之前似乎被编码为 cp1252。要将其解码回来,您应该使用

String roundTrip = new String(utf8Bytes);
byte[] bytes= roundTrip.getBytes("cp1252");
String roundTrip2 = new String(bytes, "cp1251");

关于java - 将 UTF-8 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35089025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com