2013-05-13 10 views
27

私のような質問がたくさんありましたが、答えは1つではありません... リクエスト:(アクセント付きの文字)からパラメータを取得したいのに動作しません。私はユーザーrequest.setCharacterEncoding("UTF-8")にしようとしましたが、どちらもうまくいきませんでした。HttpServletRequest UTF-8エンコーディング

私は知っているURLDecoder.decode(request.getQueryString(), "UTF-8")私に権利文字を返しますが、request.getParameterValues()は動作しません! 誰かがアイデアを持っていますか?あなただけPOST要求で動作のApache Tomcat、request.setCharacterEncoding("UTF-8")を使用している場合は

はあなたに

答えて

34

ポールの提案は、最善の行動のように思えるが、あなたはそれを回避するつもりなら、あなたはのURLEncoderまたはまったくURLDecoderの必要はありません。これがあるので:

String item = request.getParameter("param"); 

byte[] bytes = item.getBytes(StandardCharsets.ISO_8859_1); 
item = new String(bytes, StandardCharsets.UTF_8); 

// Java 6: 
// byte[] bytes = item.getBytes("ISO-8859-1"); 
// item = new String(bytes, "UTF-8"); 

更新多くの票を得て、私はBalusCのポイントに、これは決して解決策ではないことを強調したい。それは最高の回避策です。人々はこれをしてはいけません。

元の問題の原因を正確にはわかりませんが、URLがすでにUTF-8でエンコードされていて、UTF-8でエンコードされていた疑いがあります。

+9

これ以降のすべての読者には、これは解決策ではなく、解決策であることに注意してください。実際には、あなたのWebアプリケーションを壊れやすく、移植不可能にする非常に恐ろしいものです。 – BalusC

+0

あなたはそうです、指摘してくれてありがとう!私の問題にも助けられた – Broccoli

15

ありがとうございます。

GETリクエストの場合は、<Connector>URIEncoding="UTF-8"を追加してserver.xmlに追加する必要があります。

詳細はFAQ/CharacterEncoding - Tomcat Wikiを参照してください。

+0

WebSphere Application Serverはどうですか? server.xmlがWASのどのフォルダにあるのか分かりますか?私は全体を検索し、server.xmlがたくさんあることがわかりました。 –

+0

WebSphereでは、システムプロパティー 'client.encoding.override'を使用する必要があります。 https://www.ibm.com/support/knowledgecenter/en/ssw_i5_54/rzatz/51/admin/help/trun_svr_utf.html –

5

まあ、私はそれが他の誰かを助けることができる場合、私は助けてくれてうれしい..私はそれがより良い解決策はないと思うが、それは作品を行い、

String item = request.getParameterValues("param"); // Hélène 
    item = URLEncoder.encode(model.getNameItem(), "ISO-8859-1"); // H%C3%A9l%C3%A8ne 
    item = URLDecoder.decode(item, "UTF-8"); // and finally : Hélène 

を私の問題を解決する方法を見つけました: )

PS:ポール、私は以前あなたに答えなかったが、私はすでにそれらのことをしていた。とにかく助けてくれてありがとう。

+0

Paulの回答から、server.xmlがWASのどのフォルダにあるのか分かりますか?私は全体を検索し、server.xmlがたくさんあることがわかりました。 –

+0

私のために働いた、thx。私はTomcatサーバーを変更できませんでしたので、これは完璧です:) –

関連する問題