- - PR -
URLエンコード文字が取得できません。
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-03-26 17:16
Seijun1953です。お世話になっております。
次のようなURLエンコード文字列を取得しようとして、 http://localhost:8080/wiki/refer?name=%83%74%83%48%81%5b%83%7d%83%62%83%67 ============================================= public class ReferServlet extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("Windows-31J"); String name = request.getParameter("name"); //name = URLDecoder.decode(name, "Windows-31J"); //name = "フォーマット"; System.out.println("name: " + name); ============================================= としてみましたが、Eclipseのコンソールで見ると、nameには、name: ?t?H?[?}?b?g と文字化けするのみです。日本語を正しく表示させる方法はないものでしょうか。ご教示いただければ幸いです。 [ メッセージ編集済み 編集者: seijun1953 編集日時 2007-03-26 17:21 ] | ||||
|
投稿日時: 2007-03-26 17:36
QueryStringの内容はWindows-31Jで合っているし、
?t?H?[?}?b?gという化け方からして、 ISO-8859-1と解釈されてそうに思います。 リクエストが開始されてからサーブレットに辿り着くまでに、 フィルタ等でgetParameter()を呼んでいないか確認してみて下さい。 パラメータに最初に触った時点でエンコーディングが決まるため、 以降のsetCharacterEncoding()は無視されたような記憶があります。 | ||||
|
投稿日時: 2007-03-26 18:08
早速、有り難うございます。
実はこのプログラム(「基礎からのサーブレット/JSP改訂版」に掲載)、文字コードを指定するフィルターをweb.xmlに組み込んでいました。試しに、下記のようにそこのところをコメントアウトしましたが、やはり、文字化けは変わりませんでした。 ================================================== <!-- <filter> <filter-name>EncodingFilter</filter-name> <filter-class>fw.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> --> ちなみに、フィルターのプログラムは下記です。 package fw; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class EncodingFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { //何もしない } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("Windows-31J"); chain.doFilter(request, response); } public void destroy() { //何もしない } } | ||||
|
投稿日時: 2007-03-26 21:03
Seijun1953です。Tomcatをインストールしたディレクトリの/conf/server.xmlの、
<Connector port="8080"辺りの最後に、useBodyEncodingForURI="true"を挿入したら、文字化け問題が解消しました。本によると、Tomcatは5.xから、デフォルトでGETで送られる文字列のデコードには、必ずISO8859-1が使われるようになったとのことでした。121頁。見落としておりまして、大変お騒がせいたしました。 |
1