まず、コード化けが発生し始める場所を見てください。エンコーディングが統一されている限り、コード化けは発生しません。詳細な説明のために、uft-8 (個人的にはこれが最適だと考えています) を例に挙げてみましょう。
1. JSP ページでコードが文字化けする場合は、JSP ヘッダー ページに次のコードを追加します:
にタグを追加します。ヘッドタグ。
2. サーブレットで文字化けが発生する場合は、次の 2 つの方法があります:
1 つは、各サーブレットの doget メソッドと doPost メソッドのヘッダーに
request.setCharacterEncoding("UTF-8");
を追加することです。最も安全な方法は、国際化とも呼ばれる特別なフィルター クラスを作成することです。クラス名は SetCharacterEncodingFilter で、内容は次のとおりです
package com.sharep.filter;//包名 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 SetCharacterEncodingFilter implements Filter { protected String encoding = null; protected FilterConfig filterConfig = null; protected boolean ignore = true; public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter("encoding"); String value = filterConfig.getInitParameter("ignore"); if (value == null) this.ignore = true; else if (value.equalsIgnoreCase("true")) this.ignore = true; else this.ignore = false; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if (ignore || (request.getCharacterEncoding() == null)) { String encoding = selectEncoding(request); if (encoding != null) request.setCharacterEncoding(encoding); } chain.doFilter(request, response); } public void destroy() { this.encoding = null; this.filterConfig = null; } protected String selectEncoding(ServletRequest request) { return (this.encoding); } }
次に、次のコードを web-inf の web.xml に追加します。
<filter> <filter-name>SetCharacterEncoding</filter-name> <filter-class>com.young.filter.SetCharacterEncodingFilter</filter-class>//注意这里是类名,要有完整包名 <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>SetCharacterEncoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3. それでも文字化けが発生する場合は、mysql データベースの問題です
1) データベースのエンコーディングは utf-8 であることを確認してください。 mysql のデフォルトは latin1 です
2) mysql のバージョンが 4.x 以降でもデータベースに文字化けが発生する場合、解決策は 2 つあります: 1 つは、コード内でエンコード方式を指定することです。データベースに接続します:
String url = “jdbc:mysql://localhost:3306/test2?autoReconnect=true&useUnicode=true&characterEncoding=gbk&mysqlEncoding=utf8″ ;
show variables like ‘collation_%';
このコマンドは、デフォルトの文字セットを確認するために使用されます。utf-8 でない場合は、my.ini (Windows) で対応するエンコーディングを変更します。または my.cnf (linux) を utf8 に変更し、mysql サーバーを再起動します。
その他の jsp と、サーブレット操作 mysql での中国語文字化けの問題の解決策に関する関連記事については、PHP 中国語 Web サイトにご注意ください。