Struts 2(JSP)のURL要求中国語文字化けし問題
Struts 2(JSP)的URL请请求中文乱码问题2009-6-8月曜雨
今日の午后、広陵さんは広西IBMに会いに行きました.私は彼のノートで前回解決しなかったURLの中国語要求の文字化けし問題を解決してみました.さっきになってやっと解決した.不思議ではありません.中国人特有の問題は一般的にネット上で答えが見つからないからです.調べてみると、同じ問題に遭遇したのは本当に少なくなく、解決方法を与えたのはまだ少なくないが、多くは繰り返して、貼って貼って、言ったことは頭が道で、やってはいけない.もう見慣れているのはおかしくない.例えばSpringが持っているcharEncodingFilterを使うのはダメで、自分でFilterを1つ書いてもダメです.とにかくいろいろ試してみましたが、何度もTomcatを再起動したので、やはりだめでした.例えばこの文章:struts 2中国語の文字化けして解決する方法、とても道理があるようで、しかしそのようにするのはやはりだめです.しかし、面白い現象があります.それを使って紹介する最も仕方のない方法です.
IEカーネル以外のブラウザでは有効であることが分かったが、IEカーネルのブラウザ(例えばSogo)では、伝達された中国語パラメータが2文字を超えるとだめになる.例えばhttp://localhost:8080/JmsSyncSender/modifyUser?userId=誰かならいいけどhttp://localhost:8080/JmsSyncSender/modifyUser?userId=ある人、変換してから○○?文字化けして、つまり三文字目から文字化けして、おかしくて、理解できない.
やはり英語を検索してみましょう.本当にいい文章を探しています.例えば、次のようなものです.http://www.inter-locale.com/codeset1.jsp.しかし、それは上の文章と同じように、なぜこんなことをしたのかを説明したにすぎない.
広陵が帰ってきた后に1篇の文章を検索して、住所の栏は値を伝えて、中国语は文字化けします:1.(方法一)window.location=encodeURI(パス);
2.(方法2)tomcatがwebサーバを行う場合、アドレスバーを介して中国語のパラメータを渡す場合、ブラウザ上の文字化けしを防止するためにサーバサーバserverに必要である.xmlに配置する対応するポートに符号化方式を配置すればよい.例:
にuseBodyEncodingForURI="true"URIEncoding="UTF-8"を加えればよい.
2つ目の方法で試して、上の変換クラスコードを削除してみると、両者の効果は同じであることがわかります.後者はTomcatが変換してくれました.これは少し便利ですが、IEカーネルブラウザの問題は解決されていません.
最後に、URLを使って値を伝える問題ではないかと思います.Formパスを採用したらどうなりますか?そこで試してみたら、Hidden fieldを使って、
これでいいです.とても嬉しいです.
今日の午后、広陵さんは広西IBMに会いに行きました.私は彼のノートで前回解決しなかったURLの中国語要求の文字化けし問題を解決してみました.さっきになってやっと解決した.不思議ではありません.中国人特有の問題は一般的にネット上で答えが見つからないからです.調べてみると、同じ問題に遭遇したのは本当に少なくなく、解決方法を与えたのはまだ少なくないが、多くは繰り返して、貼って貼って、言ったことは頭が道で、やってはいけない.もう見慣れているのはおかしくない.例えばSpringが持っているcharEncodingFilterを使うのはダメで、自分でFilterを1つ書いてもダメです.とにかくいろいろ試してみましたが、何度もTomcatを再起動したので、やはりだめでした.例えばこの文章:struts 2中国語の文字化けして解決する方法、とても道理があるようで、しかしそのようにするのはやはりだめです.しかし、面白い現象があります.それを使って紹介する最も仕方のない方法です.
public class ConvertCharacter{
public String Convert(String s){
String result;
byte[] temp ;
try{
temp = s.getBytes("iso-8859-1");
result = new String(temp,"utf-8");
}
return result;
}
}
IEカーネル以外のブラウザでは有効であることが分かったが、IEカーネルのブラウザ(例えばSogo)では、伝達された中国語パラメータが2文字を超えるとだめになる.例えばhttp://localhost:8080/JmsSyncSender/modifyUser?userId=誰かならいいけどhttp://localhost:8080/JmsSyncSender/modifyUser?userId=ある人、変換してから○○?文字化けして、つまり三文字目から文字化けして、おかしくて、理解できない.
やはり英語を検索してみましょう.本当にいい文章を探しています.例えば、次のようなものです.http://www.inter-locale.com/codeset1.jsp.しかし、それは上の文章と同じように、なぜこんなことをしたのかを説明したにすぎない.
広陵が帰ってきた后に1篇の文章を検索して、住所の栏は値を伝えて、中国语は文字化けします:1.(方法一)window.location=encodeURI(パス);
2.(方法2)tomcatがwebサーバを行う場合、アドレスバーを介して中国語のパラメータを渡す場合、ブラウザ上の文字化けしを防止するためにサーバサーバserverに必要である.xmlに配置する対応するポートに符号化方式を配置すればよい.例:
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" useBodyEncodingForURI="true" URIEncoding="UTF-
8"/>
にuseBodyEncodingForURI="true"URIEncoding="UTF-8"を加えればよい.
2つ目の方法で試して、上の変換クラスコードを削除してみると、両者の効果は同じであることがわかります.後者はTomcatが変換してくれました.これは少し便利ですが、IEカーネルブラウザの問題は解決されていません.
最後に、URLを使って値を伝える問題ではないかと思います.Formパスを採用したらどうなりますか?そこで試してみたら、Hidden fieldを使って、
<a href="javascript: on_update_click('<s:property value=username />') > </a>
function on_update_click(username){
var txtUserId = document.getElementById("userId");
if(txtUserId!=null){
txtUserId.value= username;
}
document.listUserForm.action = "modifyUser";
document.listUserForm.submit();
}
これでいいです.とても嬉しいです.