- - PR -
Sevlet で文字化け
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-11-01 17:34
始めまして、山崎と申します。
問題があるのは、htmlからPOSTやGETでパラメータをサーブレッドへ送るときです。htmlは文字コードがEUC-JPです。サーブレッドでそのパラメータを表示するとき、”山普hという漢字が文字化けします。サーブレッドのソースはこれです。 private void processRequest(HttpServletRequest req, HttpServletResponse res) throws ServletException, Exception { res.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = res.getWriter(); String strParam = req.getParameter("name"); if (strParam != null) { try { strParam = new String(strParam.getBytes("iso-8859-1"), "MS932"); } catch (UnsupportedEncodingException e) { // エラー処理を記述する } } out.println("<html>"); out.println("<head>"); out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=MS932\">"); out.println("</head>"); out.println("<body>"); out.println("Name (" + System.getProperty("file.encoding") + ") = " + strParam); out.println("<br>"); out.close(); } | ||||
|
投稿日時: 2004-11-01 17:50
EUCで送信しているものを無理矢理MS932で解釈してるから化けるんじゃないですか? そもそも、上記引用部分は、 String strParam = req.getParameter("name"); の行以外は不用だと思うんですが。 | ||||
|
投稿日時: 2004-11-01 18:11
* if (strParam != null) {
* try { * strParam = new String(strParam.getBytes("iso-8859-1"), "MS932"); * } catch (UnsupportedEncodingException e) { * // エラー処理を記述する * } * } をとってみました。 だが、それでも「山普vは「!)!)醇ワ・」と、文字化けしました。 | ||||
|
投稿日時: 2004-11-01 18:45
の前に、 req.setCharacterEncoding("EUC_JP"); を入れてみてください。 ただし、アプリケーションサーバがServlet2.3仕様を満たしている必要があります。 | ||||
|
投稿日時: 2004-11-01 19:17
ukさん、フォローありがとうございます。
1点補足すると、 req.setCharacterEncoding("EUC_JP"); は、reqのデータにアクセスする前に設定する必要があります。 http://www.atmarkit.co.jp/fjava/onepoint/svltjsp/svltjsp12.html 参照 | ||||
|
投稿日時: 2004-11-02 09:49
req.setCharacterEncoding("EUC_JP");
String strParam = req.getParameter("name"); のようにソースを替えてみました。 ほとんどの日本語文字がちゃんと見えますが、次の文字らが次のように化けました。 = !) \ = !) \ = !) \ = !) | ||||
|
投稿日時: 2004-11-02 11:45
ホッシーです。
JavaにおけるEUC_JPのUNICODEへのマッピングでは、機種依存文字に対応していなかったかと思います。 そのため、未記入さんが入力した機種依存文字はうまく処理できないのではないでしょうか? どうしてもEUCを使用したい場合は、機種依存文字をはじくような処理が必要になるかと思います。 人名等でどうしても必要だという場合は、文字コード体系をすべてUTF-8かWindows-31J(シフトJIS)を使用する必要があります。(Javaのソース自体はEUCでもいいですが・・・。) ただし、JDK等の環境にもよる部分があるので、JSPからの入出力・ファイルへの入出力・DBへの入出力についてうまくいくかは確認が必要になるかと思います。 以上です。 |
1