我尝试从URL获取一个(JSON格式的)字符串,并将其作为Json对象使用。当我将String转换为JSONObject时,我失去了UTF-8编码。
这是我用来连接到URL并获取字符串的函数:
private static String getUrlContents(String theUrl) {
StringBuilder content = new StringBuilder();
try {
URL url = new URL(theUrl);
URLConnection urlConnection = url.openConnection();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
String line;
while ((line = bufferedReader.readLine()) != null) {
content.append(line + "\n");
}
bufferedReader.close();
} catch(Exception e) {
e.printStackTrace();
}
return content.toString();
}
当我从服务器获取数据时,以下代码显示正确的字符:
String output = getUrlContents(url);
Log.i("message1", output);
但是当我将输出字符串转换为JSONObject时,波斯字符变成了问号,像这样??????。(messages是JSON数组中的名称)
JSONObject reader = new JSONObject(output);
String messages = new String(reader.getString("messages").getBytes("ISO-8859-1"), "UTF-8");
Log.i("message2", messages);
getUrlContents
中已经被正确解释,并且在内部存储为UTF-16字符串。 - toKrausegetUrlContents
仅在服务器的字符编码与客户端相匹配时才起作用。 - Alastair McCormack