我尝试了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;
}
答案 0 :(得分:2)
以下代码从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");