yuu_nkjm blog
2011-07-30(Sat) [長年日記]
[Servlet][Java] Servletで日本語のリクエストパラメータを取得する
下書き.未検証.暇な時にStringのバイト配列を出力させて,正しいか調べる.
GETによるリクエスト
ISO_8859_1の範囲だとOK
ab cd ↓(ブラウザがGET: UTF-8でエンコード) ab%20cd ↓(request.getParameter: ISO_8859_1でデコード) ab cd
HttpServletRequest.getParameterの時にバイト列から文字列に自動で変換されるが,この変換が間違っている.誤った変換を元に戻して(getBytes),正しい変換(new String(byteData, "UTF-8"))をし直す必要がある.
ウィキペディア ↓(ブラウザがGET: UTF-8でエンコード) %e3%82%a6%e3%82%a3%e3%82%ad%e3%83%87%e3%82%a3%e3%82%a2 ↓(request.getParameter: ISO_8859_1でデコード) 文字化けした何か ↓(getBytes: ISO_8859_1でエンコード) %e3%82%a6%e3%82%a3%e3%82%ad%e3%83%87%e3%82%a3%e3%82%a2 ↓(new String(byteData, "UTF-8")) ウィキペディア
POSTによるリクエスト
public class Sample extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException{
request.setCharacterEncoding("UTF-8");
String val = request.getParameter("name");
}
}
極めてスマートに文字化けが回避出来るのですが、このメソッドではリクエストボディに含まれるデータの文字コードしか設定できません。「POST」メソッドを使った場合にはクライアントから送られてくるパラメータはリクエストボディに含まれるので問題ありませんが、「GET」メソッドを使った場合にはパラメータはURIの部分に含まれています。その為「setCharacterEncoding」メソッドを使ってもパラメータの文字コードの設定は行えませんので注意してください。
- https://www.google.co.jp/ ×143
- https://www.google.com/ ×6
- https://www.google.com/search ×2
- https://www.google.co.jp/ ×2
- http://search.yahoo.co.jp/ ×1
- http://search.babylon.com/web/servlet リクエストパラメータ?m... ×1
- 文字化け Servlet tomcat 6 utf-8 post Windows setCharacterEncoding ×3 / getParameter 日本語取得 ×3 / getparameter デコード ×3 / java サーブレット パラメータ UTF8 デコード ×2 / getParameterValues デコード ×2 / sqlite エンコード getparameter ×2 / textarea 文字化け getparameter ×2 / httpservletrequest getParameter デコード ×2 / servlet getparameter ×2 / httpservlet getpara デコード ×1 / Jmeter パラメータ 日本語 ×1 / servlet request.getParameter URLデコード 文字コード ×1 / java 32 64bit request.getParameter ×1 / httpservletrequest getparameter 日本語 ×1 / getparameter リクエスト ×1 / getparamater デコード ×1 / request パラメータ デコード ×1 / request.getParameter UTF8 ×1 / getParameter HttpServletRequest Encode ×1 / JMeter 日本語 リクエスト ×1 / getParameterMap() デコード ×1 / request.getParameter 文字化け ×1 / jmeter json 文字化け ×1 / HttpServletRequest getParameter エンコード ×1 / tomcat parameter encode 64ビット ×1 / java リクエストパラメータ セット 文字コード ×1 / getParameter デコード ×1 / tomcat 7 64 setCharacterEncoding ×1 / request setcharacterencoding UTF-8 文字化け ×1 / httpservlet 元の文字コード ×1 / httpservletrequest getparameter 文字化け ×1 / servlet utf-8 request パラメータ文字化け ×1 / sqlite servlet ×1 / getParameter UTF-8 でコード ×1 / 日本語 パラメータ 取得 文字化け ×1 / jmeter 文字化け リクエスト ×1 / Servlet getParameter デコード ×1 / java ISO_8859_1 utf-8 ×1 / リクエストパラメータ デコード 化ける ×1 / "java8" 日本語 "GETPARAMETER" 文字化け ×1 / サーブレット httpservletrequest getParameter utf8 ×1 / リクエストボディ リクエストパラメータ ×1 / tomcat リクエスト パラメータ 確認 ×1 / webdav servlet リクエスト ×1 / サーブレット 文字化け Windows10 ×1 / リクエストパラメータとは ×1 / request.getParameter 文字化け windows10 ×1 / python 文字化け servlet ×1 / httpservletrequest getparameter utf-8 ×1 / java ISO_8859_1 変換 1.8 String ×1 / Servlet 文字列 日本語 ×1 / servlet requestからutf-8文字列を取得 ×1 / リクエストパラメータ バイト配列 ×1 / servlet sqlite ×1 / String(byteData, "UTF-8") ×1 / javaservlet encode 日本語 ×1 / リクエストパラメータ 日本語 文字化け ×1 / servlet リクエストパラメータ リフレクション ×1 / 日本語 リクエストが取得できない ×1 / servletrequest getParameter decode ×1 / getParameter UTF-8 デコード ×1 / リクエストパラメータ デコード サーブレット ×1 / JMeter リクエストで送るパラメータ 文字化け ×1 / Sqlite データ取得時文字化け servlet ×1 / getparameter 文字化け firefox ×1 / HttpServletRequest デコード GET getParameter ×1 / サーブレット 日本語のパラメータが文字化けする ×1 / jmeter post文字化け ×1 / java クライアント POST 送信パラメータ追加 ×1 / python 文字化け 日本語 servlet ×1 / java リクエスト パラメータ 日本語 変換 ×1 / UTF-8 リクエスト servlet ×1 / window open url 日本語 request.getParameter ×1 / new String(byteData, "UTF-8"); ×1 / servlet post json 日本語 ×1 / サーブレット パラメータ javascript 変更 ×1 / HttpServletRequest getParameter 日本語 ×1 / getParameter UTF-8 出コード ×1 / "java8" 日本語 リクエストパラメタ ×1 / request.setCharacterEncoding 文字化け Servlet tomcat6 utf-8 post ×1 / servlet リクエスト内容 文字化け 日本語 ×1