- - PR -
サーブレット→JSPでの文字コード
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-06-23 14:38
JSPからdoGetでサーブレットに入力データ(文字列)を送り、
入力データをそのまま同じJSPに送り返して表示しよう としています。 文字コードはすべてEUC-JPなのですがJSPで返ってきた文字列を 表示すると文字化けが起こっています。 サーブレットからJSPに文字列を表示するために何か処理を しなければならないのでしょうか? 以下はJSPの記述です。 <%@page contentType="text/html;charset=EUC-JP" %> <%@page import="java.util.*" %> <html> <body bgcolor="#FFFFFF"> <% String keyword = (String)request.getAttribute("Keyword"); if(keyword != null){ %> エンコーディング:<%=request.getCharacterEncoding() %><br /> <a href="test_env?Keyword=おーけー"><%=keyword %></a> <% }else{ %> <a href="test_env?Keyword=えぬじー">キーワード</a> <% } %> </body> </html> 以下はサーブレット側の記述です。 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class test_env extends HttpServlet{ public void doGet(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException{ this.processRequest(req,res); } public void processRequest(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException{ req.setCharacterEncoding("EUC-JP"); res.setContentType("text/html; charset=EUC-JP"); String keyword = req.getParameter("Keyword"); //文字列をセットしてJSP側に処理を返す req.setAttribute("Keyword",keyword); RequestDispatcher rd = req.getRequestDispatcher("/test_env.jsp"); rd.forward(req,res); } } ためしに、JSPから送られてきた文字列をサーブレットで表示すると 文字化けが起きずに表示できました。(文字コードはEUC-JP) 上記の文を訂正します。 この投稿の後にもう一度検証してみるとサーブレットで表示した文字列も 化けていました。 [ メッセージ編集済み 編集者: ma 編集日時 2005-06-23 16:36 ] | ||||||||
|
投稿日時: 2005-06-23 14:52
JSPファイルはどの文字コードで書かれたものなのでしょうか?
pageEncoding="JSPファイルの文字コード"などを追加するとどうなりますか? 質問をする場合 ・開発環境 ・運用環境 ・バージョン を記述したほうが解答を得られやすくなると思います。 | ||||||||
|
投稿日時: 2005-06-23 15:14
itkmhさん、返答ありがとうございます
JSP、サーブレットともにEUC-JPで記入しています。 pageEncoding="EUC-JP"としてみたのですがだめでした。 JSP内にある文字は化けていないのですが サーブレットから返ってきた文字列が化けています。 環境は OS: SUSE Linux 9.2 WEB: Apache Tomcat 5.0.28 です。 [ メッセージ編集済み 編集者: ma 編集日時 2005-06-23 15:25 ] | ||||||||
|
投稿日時: 2005-06-23 15:50
こんにちは、moneです。
入力データというのはHTML等のフォームから送信するんですよね? 確か、フォームに記述された内容はISO8859-1で送られた気が。。。 記憶違いだったらすいません。 #masaさんの紹介したページのような解決方法もあったんですね。 #new String(text.getBytes("8859_1"),"EUC-JP"); #のような方法で解決していました。。。 [ メッセージ編集済み 編集者: mone 編集日時 2005-06-23 16:01 ] | ||||||||
|
投稿日時: 2005-06-23 15:52
こんにちは。
http://www.atmarkit.co.jp/fjava/rensai3/mojibake03/mojibake03.html ■GETメソッド利用時の注意点 の現象ではないでしょうか? | ||||||||
|
投稿日時: 2005-06-23 16:27
返答ありがとうございます。
おかげで問題が解決できました。 →moneさん
アンカータグでサーブレットに飛ばしています。 なので文字列はクエリとして送っています。 フォームでの送信はdoPostで行っていたので、 doGetで文字化けの現象がおきた時は理解不能状態になってました ![]() →masaさん 指定URLより
まさにこの通りでした。 ![]() 文中に「5.0.28」とあったときは「!」でした。 エンコーディングされない理由は理解できましたが、こんな仕様 になっていたとは・・・! useBodyEncodingForURI="true"とすると見事に文字列がエンコ ーディングされました。 useBodyEncodingForURI属性を変更して他に影響がでないのか気に なるところですが、ひとまずは安心できました ![]() [ メッセージ編集済み 編集者: ma 編集日時 2005-06-23 16:31 ] |
1