Index > サーブレットで文字化けを防ぐために文字エンコーディングを指定するポイント(java,servlet)
Sat, February 14, 2009

サーブレットで文字化けを防ぐために文字エンコーディングを指定するポイント(java,servlet)

サーブレットで出力したHTMLが文字化けしてしまう、ということがあります。 そんなときのチェックポイントのまとめ。

Hello World サーブレット

サンプルとなるサーブレット.

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet{

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html; charset=UTF-8"); // 1)

        PrintWriter pw=response.getWriter(); // 3)

        pw.println("<html>");
        pw.println("<head>");
        pw.println("<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">"); // 2)
        pw.println("</head>");
        pw.println("<body>");

        pw.println("Hello World.");

        pw.println("</body>");
        pw.println("</html>");
    }
}

1) setContentType指定

response.setContentType("text/html; charset=UTF-8"); 

※ response は HttpServletResponse クラスのインスタンスです。

2) サーブレットで出力するHTMLのhead内のmetaタグ指定

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

3) response.getWriter() を使う

HTML文字列の出力に response.getOutputStream()を使わないこと。 必ず response.getWriter()を使う。

※ response は HttpServletResponse クラスのインスタンスです。

ちなみに、デフォルトで、getWriter()で得た Writer インスタンスは、 UTF-8になっていると思われる。(tomcatなどではそのようです。)

別のエンコーディングを使いたい場合はどうするのか? たぶん、

...のではないか。

サーブレットで、CGIを使う場合

request.getParameter()する前にエンコード指定する 。

request.setCharacterEncoding("UTF-8");
String foo=request.getParameter("foo");

※ request は HttpServletRequest クラスのインスタンスです。

 Twitter
follow me on Twitter
 Categories