1

我正在使用 Google App Engine 来获取一些数据。在从 GAE 发送数据之前,我将内容类型设置为“text/html”,将字符编码设置为“UTF-8”。我确定字符 åöä 已正确存储在服务器数据库中。

从我的 android 应用程序获取数据时,一切正常。字符 åäö 正确表示。这是奇怪的部分:当从 Windows 上的 java 应用程序获取相同的数据时,åäö 被“Ã¥”和其他奇怪的符号取代。当在 Mac 上从我的 java 应用程序中获取相同的数据时,åäö 会被其他一些奇怪的字符所取代。

所以我的问题是:为什么 android 应用程序可以正确读取字符串,而 java 应用程序不能?

编辑:

以下是我从 GAE 发送字符串的方式:

resp.setContentType("text/html");
resp.setCharacterEncoding("UTF-8");
resp.getWriter().println(myString);

以下是我在 android 和 windows 上的 java 中读取它的方式:

String response = "";
try {
URL url = new URL("http://mydomain.com/blabla");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();

BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
   response += line;
}
wr.close();
rd.close();
} catch (Exception e) {
e.printStackTrace();
}

System.out.println("Response is: " + response);
4

2 回答 2

1

您如何知道 Windows 和 Mac 上的数据有误?您是否将其打印到控制台?如果是这样,很可能(尤其是在 Windows 上)控制台字符编码是错误的。您将向控制台写入 UTF-8 编码字符,控制台将尝试将它们解释为 Windows CP-whatever。

于 2012-04-12T07:46:27.823 回答
0

听起来您没有明确说应该使用 UTF-8 编码来解码字符串,并且它是由默认平台编码完成的。

于 2012-04-12T07:46:39.963 回答