eclipse3.2+j2ee5.0+tomcat5.09+mysql5.0をベースに開発を行っていますが、
まず、POST形式の中国語データ
の文字化けはフィルターでリアルタイムにフィルタリングできます。
フィルターの
コードは次のとおりです
。
インポート javax.servlet.Filter;
インポート javax.servlet.FilterChain;
インポート javax.servlet.FilterConfig;
インポート javax.servlet.ServletException;
インポート javax.servlet.ServletRequest;
インポート javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;
public class SetCharacterEncodingFilter は Filter ...{
protected 文字列エンコーディング = null;
protected FilterConfig filterConfig = null;
protected boolean 無視 = true;
public void destroy() ...{
this.encoding = null;
this.filterConfig = null;
public
void doFilter(ServletRequest リクエスト、ServletResponse レスポンス、
FilterChain チェーン)
throws IOException, ServletException ...{
// 使用する文字エンコーディングを条件付きで選択して設定します
if (ignore || (request.getCharacterEncoding() == null)) ...{
文字列エンコーディング = selectEncoding(request);
if (エンコーディング != null)
request.setCharacterEncoding(エンコーディング);
}
// 次のフィルタに制御を渡します
chain.doFilter(リクエスト、レスポンス);
}
public void init(FilterConfig filterConfig) throws ServletException ...{
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("エンコーディング");
文字列値 = filterConfig.getInitParameter("ignore");
if (値 == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
それ以外
this.ignore = false;
}
protected String selectEncoding(ServletRequest request) ...{
return (this.encoding);
}
}
フィルター設定 (web.xml 設定):
<フィルター>
<フィルタ名>文字エンコーディングの設定</フィルタ名>
<フィルタークラス>filters.SetCharacterEncodingFilter</フィルタークラス>
<初期パラメータ>
<パラメータ名>エンコーディング</パラメータ名>
<パラメータ値>GBK</パラメータ値>
</init-param>
</filter>
<フィルタマッピング>
<フィルタ名>文字エンコーディングの設定</フィルタ名>
<url-パターン>/*</url-パターン>
</フィルターマッピング>
2. 中国語データをデータベースに保存する際の文字化けの問題を
mysql で例として取り上げます。接続文字列を
jdbc:mysql://localhost:3306/workshopdb? useUnicode=true&characterEncoding=GBK
に書き換えます。
3. URL を介してパラメーターを渡し、中国語のファイル名を識別する際の問題
問題の症状: 1. URL を介してパラメーターを渡す (例:
http://localhost:81/crjy/admin/articlelist.jsp?levelId=64&levelName =Student)パーティービルディング
request.getParameter("levelName")で取得した値はらんまです。
2. 中国語のファイル名を認識します。例:
<img src="./pic/Sichuan Map.jpg"> 画像は表示できません。
解決策:
1. 最初の問題だけを解決したい場合は、次の 2 行のコードで非常に簡単です
。
role=new String(role.getBytes("ISO-8859-1"),"GB2312");
out.println(役割);
Tomcat サーバーはデフォルトで ISO-8859-1 文字セットを使用するためです。ただし、これで解決できるのは最初の問題のみで、中国語のファイル名の問題は解決できません。
2. 2 つの問題を一緒に解決できるように、server.xml を変更して次のステートメントを見つけて URIEncoding="GB18030" を追加します。ロールは必要ありません) =new String(role.getBytes("ISO-8859-1"),"GB2312"); 変換、取得されるパラメータは通常の中国語です)
<Connector acceptCount="100" connectionTimeout="20000" debug=" 0" disableUploadTimeout="true" enableLookups="false" maxSpareThreads="75" maxThreads="150" minSpareThreads="25" port="81" redirectPort="8443"/>
また、中国語のファイル名の問題を解決できる URIEncoding="UTF-8" を追加できることが多くの記事で紹介されていますが、URL で渡されるパラメータを String role=request.getParameter("character"); で取得する場合、 、UTF-8エンコードされるので、GB2312に変換する必要があり面倒です。
以上が私の利用概要です。皆様から貴重なご意見をいただければ幸いです。
http://blog.csdn.net/lijiuu/archive/2007/02/25/1514354.aspx