リクエストからパラメータ(アクセント付き文字)を取得したいのですが、機能しません。ユーザーrequest.setCharacterEncoding( "UTF-8" )
を試しましたが、機能しませんでした。
URLDecoder.decode( request.getQueryString(), "UTF-8" )
は権利文字を返しますが、request.getParameterValues()
は機能しません。誰にもアイデアがありますか?
Paulの提案は最善の行動のように思えますが、それを回避する場合は、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エンコードされたと思われます。
Apache Tomcatを使用している場合、request.setCharacterEncoding("UTF-8")
はPOST
リクエストでのみ機能します。
GET
リクエストの場合、URIEncoding="UTF-8"
の<Connector>
にserver.xml
を追加する必要があります。
詳細は FAQ/CharacterEncoding-Apache Tomcat wiki space をご覧ください。
まあ、私は私の問題を解決する方法を見つけました、それはより良い解決策ではないと思いますが、うまくいきます。
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:ポール、以前は答えなかったが、すでにそうしていた。とにかく助けてくれてありがとう。