1

GoogleAppEngineを使用してデータを取得しています。GAEからデータを送信する前に、コンテンツタイプを「text / html」に設定し、文字エンコードを「UTF-8」に設定しました。文字åöäがサーバーデータベースに正しく保存されていると確信しています。

私のAndroidアプリからデータを取得するとき、すべてが正常に機能します。文字åäöは正しく表現されています。奇妙な部分は次のとおりです。Windows上のJavaアプリから同じデータを取得すると、åäöは「Ã¥」やその他の奇妙な記号に置き換えられます。MacのJavaアプリから同じデータを取得すると、åäöは他の奇妙な文字に置き換えられます。

だから私の質問は:Javaアプリが読み取らないのにAndroidアプリが文字列を正しく読み取るのはなぜですか?

編集:

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でエンコードされた文字をコンソールに書き込み、コンソールはそれらをWindowsCPとして解釈しようとします。

于 2012-04-12T07:46:27.823 に答える
0

文字列のデコードにUTF-8エンコーディングを使用する必要があること、およびデフォルトのプラットフォームエンコーディングによって実行されることを明示的に言っていないようです。

于 2012-04-12T07:46:39.963 に答える