gpt4 book ai didi

java - 使用 Java 下载 UTF-16 JSON 字符串

转载 作者:行者123 更新时间:2023-12-02 06:01:41 25 4
gpt4 key购买 nike

我正在将我们的 iOS 应用程序转换为 Android(第一次使用 Android,但长期使用 Java 程序员)。有一个 Web 服务向应用程序提供 2 个 JSON 源。该 Web 服务是用 Python 编写的,第一个 JSON 字符串输出为“ascii”。这很好,Android 应用程序可以正常下载并显示。问题出在第二个。

由于 JSON 很容易包含非英语字符(重音、标点符号等),因此我在 Python 中将其输出为“utf-16”。我在 Android 应用程序中下载内容如下:

new DownloadTask(new Downloader.Callback() {
@Override
public void finishedDownloading(String content) {

final City[] cities = new Gson().fromJson(content, City[].class);
Downloader.cities = cities;
System.out.println("Found " + cities.length + " cities");
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
setListAdapter(new CityArrayAdapter(getActivity(),
R.layout.listview_item_row,
cities));
pb.dismiss();
}
});
}
}).execute(Constants.CITIES_URL);

下载任务:

protected String doInBackground(String... sUrl) {
BufferedReader br = null;
try {
URL url = new URL(sUrl[0]);
br = new BufferedReader(new InputStreamReader(url.openStream()));
String line = br.readLine();
String doc = "";
while (line != null) {
doc += line + "\r\n";
line = br.readLine();
}
br.close();
callback.finishedDownloading(doc);

return doc;
} catch (MalformedURLException e) {
System.out.println("Exception: " + e.getMessage());
} catch (IOException e) {
System.out.println("Exception: " + e.getMessage());
}
return null;
}

我一直在阅读有关 Java 如何处理字符串的信息,并且显然字符串存储为 UTF-16,所以我不确定为什么它不能正常工作?

仅提一下错误,Gson 会抛出错误,但只是由于字符串显示不正确。当我将 url 响应打印到控制台时,它会每隔一个字符显示“?”(表示编码错误)。

最佳答案

你的问题是InputStreamReader。您应该明确告诉它要使用什么字符集,而不是使用平台默认值,这不是您想要的。理想情况下,您应该阅读 Content-Type header 并使用它来选择字符集,而不是硬编码 utf-16(LE 或 BE?)。

澄清你对 Java 在内部使用 utf-16 的想法,你是对的,但问题是你需要将字节转换为字符,这与 Java 内部如何处理 String 无关。

此外,您可能需要考虑使用 utf-8,因为它往往是网络上的默认 unicode 编码。

关于java - 使用 Java 下载 UTF-16 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22615290/

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