- - PR -
Servletの文字化け
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-02-25 19:09
下記のような運用で日本語の文字化けに悩まされています。
環境: RedHat 7.2 tomcat4-4.1.12-full.2jpp apache-1.3.27-1.7.2 下記のコーディングでブラウンザーから http://fsgt010.soft.hitachi.co.jp/dic/servlet/TestGet?MY2=aあa を実行すると、Netscapeでは正しい結果が得られますが、 query=MY2=a%82%A0a MY2=aあa IEは下記のように文字化けになってしまいました。 query=MY2=a??a MY2=a??a Apacheのaccess_logを見ると、Netscapeから渡されたパラメータは"a%82%A0a"に対して、IEの方のパラメータは"a\x82\xa0a"になっています。 [25/Feb/2003:18:58:54 +0900] "GET /dic/servlet/TestGet?MY2=a%82%A0a HTTP/1.1" [25/Feb/2003:18:59:19 +0900] "GET /dic/servlet/TestGet?MY2=a\x82\xa0a HTTP/1.1" そして、IEで下記のようなURLで指定すると文字化けしなく表示できます。 http://fsgt010.soft.hitachi.co.jp/dic/servlet/TestGet?MY2=a%82%A0a よく理解できませんが、設定の悪い?コーディングの悪い?或いはApacheやブラウンザーの仕様? 誰か頭いい方、教えてください。 =コード= import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class TestGet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html;charset=EUC_JP"); PrintWriter out = new PrintWriter((new OutputStreamWriter(response.getOutputStream(),"EUC_JP")),true); // PrintWriter out = response.getWriter(); String query = request.getQueryString(); String MY2 = new String(request.getParameterValues("MY2")[0].getBytes("8859_1"),"SJIS"); // String MY2 = new String(request.getParameterValues("MY2")[0].getBytes("MS932"),"SJIS"); out.println("<HTML>"); out.println("<HEAD>"); out.println("<TITLE>JP1 Dictionary</TITLE>"); out.println("<BODY>"); out.println("query=" + query + "<BR>"); out.println("MY2=" + MY2); out.println("</BODY>"); out.println("</HTML>"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { doGet(request, response); } } | ||||
|
投稿日時: 2003-03-05 13:15
少なくとも、
responseがEUC requestがSJIS というところが不自然です。 | ||||
|
投稿日時: 2003-03-14 11:34
responseがEUC
requestがEUC 及び responseがSJIS requestがSJIS 共試しましたが、結果は同じです。 Apacheのaccess_logに表示しているNSとIEのパラメータの違い(NS−"a%82%A0a"IE−"a\x82\xa0a")と関係ありますかね? [25/Feb/2003:18:58:54 +0900] "GET /dic/servlet/TestGet?MY2=a%82%A0a HTTP/1.1" [25/Feb/2003:18:59:19 +0900] "GET /dic/servlet/TestGet?MY2=a\x82\xa0a HTTP/1.1" また、ApacheはTomcat4にmod_webapp-1.0-1を利用して、連携する場合だけ上記の現象が発生します。 因みに、 http://xxx.xxx.xxx/dic/servlet/TestGet?MY2=aあa の時だけ発生します。 http://xxx.xxx.xxx:8080/dic/servlet/TestGet?MY2=aあa の時はNSもIEも正常に表示できます。 | ||||
|
投稿日時: 2003-03-14 12:35
こんにちは 両ブラウザとも http://xxx.xxx.xxx/dic/servlet/TestGet?MY2=a%82%A0aで リクエストすると正常に表示されますか? FORMパラメータはエンコードして送信したほうがよろしいと思います。 | ||||
|
投稿日時: 2003-03-14 18:07
| ||||
|
投稿日時: 2003-03-14 18:12
| ||||
|
投稿日時: 2003-03-14 18:23
JDK1.4以前ではMS932のエンコーディング名としてのサポートが明示されていますが、
JDK1.4.1以降ではMS932のエンコーディング名としてのサポートは明示されていません (サポートされているかも未確認)ので、JDK1.4.1ではWindows-31Jの使用を推奨します。 | ||||
|
投稿日時: 2003-03-25 15:03
raystarへの返事:
http://xxx.xxx.xxx/dic/servlet/TestGet?MY2=a%82%A0aでリクエストすると両ブラウザとも正常に表示されます。 (NSのほうはaあaで渡すと自動的にa%82%A0aと変換してくれます) 但し、パラメータは他のURLからaあaの形で受け取りますので、エンコードできない状態です。 ====================================== asipへの返事: MS932のエンコーディングも試しましたが、やはりIEの方はMY2=a??aになります。 ====================================== 纏めると http://xxx.xxx.xxx/dic/servlet/TestGet?MY2=aあa EUC=>NS:OK IE:NG SJIS=>NS:OK IE:NG MS932=>NS:OK IE:NG http://xxx.xxx.xxx:8080/dic/servlet/TestGet?MY2=aあa EUC=>NS:OK IE:OK SJIS=>NS:OK IE:OK MS932=>NS:OK IE:OK Apache+Tomcat4の連携でIEと相性わるいでしょうか? | ||||
