- PR -

Sevlet で文字化け

1
投稿者投稿内容
未記入
会議室デビュー日: 2004/11/01
投稿数: 3
投稿日時: 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();
}

Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-11-01 17:50
引用:

String strParam = req.getParameter("name");
if (strParam != null) {
try {
strParam = new String(strParam.getBytes("iso-8859-1"), "MS932");
} catch (UnsupportedEncodingException e) {
// エラー処理を記述する
}
}




EUCで送信しているものを無理矢理MS932で解釈してるから化けるんじゃないですか?
そもそも、上記引用部分は、
String strParam = req.getParameter("name");
の行以外は不用だと思うんですが。
未記入
会議室デビュー日: 2004/11/01
投稿数: 3
投稿日時: 2004-11-01 18:11
* if (strParam != null) {
* try {
* strParam = new String(strParam.getBytes("iso-8859-1"), "MS932");
* } catch (UnsupportedEncodingException e) {
* // エラー処理を記述する
* }
* }

をとってみました。
だが、それでも「山普vは「!)!)醇ワ・」と、文字化けしました。

uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-11-01 18:45
引用:

String strParam = req.getParameter("name");


の前に、
req.setCharacterEncoding("EUC_JP");
を入れてみてください。
ただし、アプリケーションサーバがServlet2.3仕様を満たしている必要があります。
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-11-01 19:17
ukさん、フォローありがとうございます。

1点補足すると、
req.setCharacterEncoding("EUC_JP");
は、reqのデータにアクセスする前に設定する必要があります。

http://www.atmarkit.co.jp/fjava/onepoint/svltjsp/svltjsp12.html 参照
未記入
会議室デビュー日: 2004/11/01
投稿数: 3
投稿日時: 2004-11-02 09:49
req.setCharacterEncoding("EUC_JP");
String strParam = req.getParameter("name");

のようにソースを替えてみました。
ほとんどの日本語文字がちゃんと見えますが、次の文字らが次のように化けました。

= !)
\ = !)
\ = !)
\ = !)
ホッシー
会議室デビュー日: 2004/10/22
投稿数: 13
投稿日時: 2004-11-02 11:45
ホッシーです。

JavaにおけるEUC_JPのUNICODEへのマッピングでは、機種依存文字に対応していなかったかと思います。
そのため、未記入さんが入力した機種依存文字はうまく処理できないのではないでしょうか?

どうしてもEUCを使用したい場合は、機種依存文字をはじくような処理が必要になるかと思います。
人名等でどうしても必要だという場合は、文字コード体系をすべてUTF-8かWindows-31J(シフトJIS)を使用する必要があります。(Javaのソース自体はEUCでもいいですが・・・。)

ただし、JDK等の環境にもよる部分があるので、JSPからの入出力・ファイルへの入出力・DBへの入出力についてうまくいくかは確認が必要になるかと思います。

以上です。
1

スキルアップ/キャリアアップ(JOB@IT)