ホームページ  >  記事  >  php教程  >  jspとサーブレットで動作するmysqlの中国語文字化け問題の解決方法

jspとサーブレットで動作するmysqlの中国語文字化け問題の解決方法

高洛峰
高洛峰オリジナル
2016-12-29 17:05:501274ブラウズ

まず、コード化けが発生し始める場所を見てください。エンコーディングが統一されている限り、コード化けは発生しません。詳細な説明のために、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_%&#39;;
を使用します。

このコマンドは、デフォルトの文字セットを確認するために使用されます。utf-8 でない場合は、my.ini (Windows) で対応するエンコーディングを変更します。または my.cnf (linux) を utf8 に変更し、mysql サーバーを再起動します。

その他の jsp と、サーブレット操作 mysql での中国語文字化けの問題の解決策に関する関連記事については、PHP 中国語 Web サイトにご注意ください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。