10

HTTPServletResponseクライアントに使用するサーブレットからアラビア語のデータを送信したい

私はこれを試しています

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

と私はこのような言葉を受け取ります

String arabicWord = response.getHeader("Info");

クライアント(受信)でもこれを試しました

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

しかし、奇妙な英単語を受信するため、Unicode がないようです。アラビア語の utf8 単語を送受信するにはどうすればよいですか?

4

2 に答える 2

36

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

*TEXT の単語には、RFC 2047 [14] の規則に従ってエンコードされた場合にのみ、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形式に変換します。ヘッダーで送信されるデータには、サイズ制限がある場合があることに注意してください。代わりに、プレーンテキスト、JSON、CSV、または XML 形式で、応答本文で送信してください。このようにカスタム HTTP ヘッダーを使用することは、つまりデザインの臭いです。

于 2012-06-26T18:00:11.720 に答える
2

変数がどこから来ているのかわかりませんがword、これを試してください:

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

更新: HTTPヘッダーの UTF-8 でエンコードされたデータに問題があるようです。詳細については、Java での HTTP ヘッダーのエンコード/デコードを参照してください。

于 2012-06-26T17:56:20.553 に答える