2012-06-26 8 views
10

でHTTPヘッダの結果でUTF-8の値を送信する私はこのは文字化け

response.setCharacterEncoding("UTF-8"); 
response.setHeader("Info", arabicWord); 

をしようとしています

クライアントへHTTPServletResponseを使用してサーブレットからアラビア語のデータを送信したいと私はこの

ような言葉を受け取りますクライアント(受信)で
String arabicWord = response.getHeader("Info"); 

もこの

byte[]d = response.getHeader("Info").getBytes("UTF-8"); 
arabicWord = new String(d); 
を試し

しかし、私は奇妙な英語の単語を受け取るので、ユニコードがないようですので、どうすればアラビア語のutf8単語を送受信できますか?

答えて

27

HTTPヘッダーはUTF-8をサポートしていません。彼らは正式にISO-8859-1のみをサポートしています。 RFC 2616にもsection 2を参照してください。

* TEXTの言葉が文字から文字を含めることは、[14] RFC 2047の規則に従ってエンコードされた場合にのみ、ISO-8859-1 [22]以外に設定します。

あなたの最善の策は、URLエンコードとデコードです。

response.setHeader("Info", URLEncoder.encode(arabicWord, "UTF-8")); 

String arabicWord = URLDecoder.decode(response.getHeader("Info"), "UTF-8"); 

URLエンコードは完全に有効なISO-8859-1である%nn formatにそれらを変換します。ヘッダーで送信されるデータにはサイズの制限があることに注意してください。むしろレスポンス本体でプレーンテキスト、JSON、CSVまたはXML形式で送信してください。このようにカスタムHTTPヘッダーを使用することは、デザインの匂いです。

+0

に感謝し、チェックします – Totti

+0

再びthaaaaaaaaank、本当にありがとうございます – Totti

+0

PHPからUTF-8文字列をJavascriptに渡す必要がありました。 –

2

私はword変数から来ている場所を知っているが、これを試してみません:

arabicWord = new String(d, "UTF-8"); 

UPDATE:問題は、HTTPでのUTF-8エンコードされたデータでヘッダあるように見る、見える:HTTP headers encoding/decoding in Javaのために詳細な議論。

+0

私が編集を参照してください、すでにそれを試してみましたが、動作しません – Totti

+0

@Totti:私の更新を参照して読んhttp://stackoverflow.com/questions/324470 –

+0

私は、私はそれをしようとするあなたに – Totti

関連する問題