- - PR -
Struts2で文字化け
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-05-18 22:39
Struts2で文字化けとなり困っています。
どなたかご存じの方がいらっしゃいましたら、ご教授お願い致します。 ※Struts2の文字化けについての情報は結構出回っているようですが、 どうもうまくいきません。 自分の備忘録、情報共有のためにも記載させてください。 宜しくお願いします。 ■問題 Struts2でURLのQueryStringに日本語を入力して、 Getした結果の表示文字列が化ける。 ※URL直打ちした場合のみ文字化け。 <例> 〜/hoge.action?keyword=ほげ 「ほげ」が画面表示時に文字化けします。 ------------------------------------------------------------ ■詳細情報 【やりたいこと】 入力フォームからキーワードを入力して、 キーワードで検索処理を走らせて、 入力キーワード、検索結果を画面に表示する。 【状況】 ・正常処理(URL直打ちをせずに画面のボタン、リンクでのAction時)は、 文字化けとならない。 ・文字化け対策として、server.xmlの設定を変更。 (URIEncoding="UTF-8" useBodyEncodingForURI="true"を追記) 本設定を入れない場合は、正常処理時も文字化けします。 ・SetCharacterEncodingFilterは使用していません。 ------------------------------------------------------------ ■環境 JDK:1.5.0_11 Windows:Vista Tomcat:5.5.26 Eclipse:3.3.0 ------------------------------------------------------------ ■struts.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="false" /> <!-- Add packages here --> <include file="webapps.xml"/> </struts> ------------------------------------------------------------ ■server.xml <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --> <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" useBodyEncodingForURI="true" /> ------------------------------------------------------------ ■JSP <%@page contentType="text/html; charset=UTF-8" errorPage="./error.jsp"%> <%@page pageEncoding="Windows-31J"%> <%@taglib uri="/struts-tags" prefix="s"%> ------------------------------------------------------------ |
|
投稿日時: 2008-05-19 09:16
Tomcat5以降はデフォルトでURL(Getのパラメータ部含む)をUTF-8としてデコードします。
ブラウザ側がURLをどのようにエンコードするかは実装と設定に依存します。 (IEは「常にUTF-8でURLを送信する」の設定に依存) http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32037&forum=12 にその辺りの詳しい情報があります。 |
|
投稿日時: 2008-05-22 22:03
ひろ@yaさん
アドバイスありがとうございます。 まず、結論としては > URIEncoding="UTF-8" useBodyEncodingForURI="true" 本設定で文字化けがなく表示出来ました。 useBodyEncodingForURI="true"の設定反映ミス(サーバ再起動確認漏れ?)により、 URL直打ちした場合に文字化けとなっていました。 つまらないことで、お手数をお掛けしました。 下記サイトがエンコードについて詳しく書かれていましたので、記載しておきます。 http://tidus.ultimania.org/wiki/index.php?Tomcat ありがとうございました。 |
1