2012-04-12 9 views
1

Google App Engineを使用してデータを取得しています。 GAEからデータを送信する前に、コンテンツタイプを「text/html」に、文字エンコードを「UTF-8」に設定しました。私は、文字åöäがサーバーデータベースに正しく格納されていることを確認しています。なぜ私のアンドロイドアプリはåäöを読むのですか?私のJavaアプリは(GAEからデータを取得すると)なぜですか?

私のアンドロイドアプリからデータを取得すると、すべて正常に動作します。 åäöの文字は正しく表現されています。ここでは奇妙な部分です:私のJavaアプリケーションからWindows上で同じデータを取得すると、åäöは "Ã¥"と他の奇妙な記号に置き換えられます。私のJavaアプリケーションからMacで同じデータを取得すると、åäöは他の奇妙な文字に置き換えられます。

私の質問は次のとおりです。なぜ、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); 
+0

文字列を生成して読み取るコード – waqaslam

答えて

1

あなたはどのようにを知っていますかWindowsとMacではデータが間違っていますか?コンソールなどに印刷していますか?もしそうなら、(特にWindowsでは)コンソール文字エンコーディングが間違っている可能性があります。 UTF-8でエンコードされた文字をコンソールに書き込んで、Windows CPとして解釈しようとします。

+0

はい私はそれをコンソールとGUIの両方に出力しています。どのようにしてコンソールがWindows CPと解釈するのを防ぐのですか? – Emiam

+1

@Emiam Unicodeコードポイントを出力するか、または16進数でバイトを出力し、両端でそれらを比較します。 –

0

あなたは、UTF-8エンコーディングが文字列をデコードするために使用されるべきであり、デフォルトのプラットフォームエンコーディングによって行われると明示的に言っているような音がします。

+0

ああ、そうです。私は何らかの理由で "text/html"を "text/html; charset = utf-8"と誤読し、関連するHTTPライブラリがエンコーディングを処理していると仮定しました。しかし、あなたは正しい、これは間違いなく可能性です。 – dty

+0

私はあなたの答えを理解していません。 GAEサーバーで適切な設定を行っていないということですか?上記の私の更新された質問をご覧ください。 – Emiam

関連する問題