1

server.xml で Tomcat のエンコーディングを適切に設定したにもかかわらず、param をデコードしない Java サーブレットの getParameter() に問題があります。

 <Connector port.. URIEncoding="UTF-8"/>

生のクエリをデコードすると、デコードされたクエリが取得されますが、getParamter は単独ではデコードされません!

 protected void service(HttpServletRequest request, HttpServletResponse response) 
                throws ServletException, IOException {
    System.out.println("CharacterEncoding: "+ request.getCharacterEncoding());
    System.out.println("Query String: "+ URLDecoder.decode(request.getQueryString(), "UTF-8");
    System.out.println("Query param name: "+request.getParameter("name"));
    ...

私が得る結果は次のとおりです。

文字エンコーディング: UTF-8

クエリ文字列: name=日本語一番ぜソFOX_&'">•«Ç€Ö™»_αß_iİıI_Администратор_cœur d´Ouchy__عربي

クエリ パラメータ名: æ¥æ¬èªä¸çªãã½ï¼¦ï¼¯ï¼¸_&'">â¢â«ãâ¬ã⢻_αÃ_iİıI_ÐдминиÑÑÑаÑоÑ_cÅur dâ´Ouchy_ð ðª_ع ±Ø¨Ù

クエリと名前の値が同じではないことがはっきりとわかります。私のjspページでは、 <%@page contentType="text/html; charset=UTF-8" %> を使用しています

4

1 に答える 1