2010-12-14 8 views
3

utf-8エンコーディングで文字列を送信するサーブレットがあります。また、私はクライアントがApacheのhttpcomponentsライブラリで書かれている。サーブレットとApacheのUTF-8エンコーディングの問題HttpClient

私の問題は、utf-8での応答の読み取りです。 ñやçなどの一部の特殊文字は正しく読み込まれません。要求を送信するhtmlページでサーバーをテストすると、文字列は正しいものの、エンコードはBOMのないUTF-8です。

一部抜粋: サーブレット

response.setContentType ("application/json; charset=UTF-8"); 
PrintWriter out = response.getWriter(); 
out.write (string); 

クライアント

entity = response.getEntity(); 
entity.getContentEncoding(); //returns null 
resultado = EntityUtils.toString (entity, HTTP.UTF_8); //Some characters are wrong 

誰もが同じ問題を抱えていましたか?

解決: 申し訳ありませんが、クライアントとサーバーが正常に動作していました。私はアンドロイドアプリを書いているし、logcat(私はメッセージを印刷する)はutf-8エンコーディングをサポートしていないようだ。

答えて

7

あなたは

response.setCharacterEncoding("utf-8"); 

代わりのsetContentTypeを経由してエンコーディングを設定を試してみましたか?ドキュメントによって違いはありませんが、誰が知っているのでしょうか。

また、文字エンコードを設定する前に、response.getWriter()をコードのどこにも呼び出さなかったことを確認してくださいその場合は。

+0

はい:(

+1

あなたは問題がサーブレット側またはクライアント側にあるかどうかを識別することができ – Thomas

+1

うんあなたがWiresharkのようなもので、それをチェックアウトする必要があります?。 – Hiro2k

3

ていることを確認したストリームのバイトはUTF-8形式である:

out.write((yourstring.getBytes("UTF-8")); 
0

StandardCharsets.UTF_8が適切なエンコーディングを取得するためにEntityUtilで使用することができます。ここで

は、サンプルの抜粋です。

HttpEntity entity = response.getEntity(); 
String webpage = EntityUtils.toString(entity, StandardCharsets.UTF_8);