【问题标题】:Why does my android app read åäö but my java app doesn't(when getting data from GAE)?为什么我的 android 应用程序读取 åäö 但我的 java 应用程序没有(从 GAE 获取数据时)?
【发布时间】:2012-04-24 13:17:25
【问题描述】:

我正在使用 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);

【问题讨论】:

  • 粘贴生成和读取字符串的代码

标签: java android google-app-engine servlets utf-8


【解决方案1】:

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

【讨论】:

  • 是的,我将它打印到控制台和 GUI 上。如何防止控制台尝试将它们解释为 Windows CP-whatever?
  • @Emiam 打印出 unicode 代码点,或者打印出十六进制字节,并在两端进行比较。
【解决方案2】:

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

【讨论】:

  • 啊,是的。出于某种原因,我将“text/html”误读为“text/html; charset=utf-8”,并假设相关的 HTTP 库会负责编码。但你是对的,这绝对是一种可能。
  • 我不明白你的回答。你的意思是我没有在 GAE 服务器上设置正确的设置吗?请在上面查看我更新的问题。
猜你喜欢
  • 1970-01-01
  • 2018-05-24
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
相关资源
最近更新 更多