Heim  >  Artikel  >  php教程  >  Lösung für das Problem verstümmelter chinesischer Zeichen in MySQL, das von JSP und Servlet betrieben wird

Lösung für das Problem verstümmelter chinesischer Zeichen in MySQL, das von JSP und Servlet betrieben wird

高洛峰
高洛峰Original
2016-12-29 17:05:501306Durchsuche

Schauen wir uns zunächst an, wo die verstümmelten Zeichen auftauchen. Solange die Kodierung einheitlich ist, wird es keine verstümmelten Zeichen geben (was meiner Meinung nach das Beste ist). und im Detail erklären:

1. Wenn der verstümmelte Code auf der JSP-Seite erscheint:
29f95d422620609f91215c295576dff1
Fügen Sie das Tag im Head-Tag hinzu.

2. Wenn verstümmelte Zeichen im Servlet erscheinen, gibt es zwei Methoden:
Eine besteht darin,
request.setCharacterEncoding(" zum Header der Doget- und doPost-Methoden in jedem Servlet-UTF hinzuzufügen. 8″);
Die zweite Option ist ein für alle Mal die sicherste, nämlich das Schreiben einer dedizierten Filterklasse, auch Internationalisierung genannt. Der Klassenname ist SetCharacterEncodingFilter und der Inhalt ist wie folgt

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);
 }
}

Dann fügen Sie in web-inf den folgenden Code zu web.xml hinzu:

<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>

Das ist es!

3. Wenn immer noch verstümmelte Zeichen vorhanden sind, liegt ein Problem mit der MySQL-Datenbank vor

1) Stellen Sie sicher, dass die Datenbankkodierung UTF-8 ist, wenn Sie die Datenbank erstellen. Am besten geben Sie das Kodierungsformat in jeder Tabelle an. Das Standard-MySQL ist latin1
2) Wenn die MySQL-Version ist 4.x oder höher erscheinen immer noch verstümmelte Zeichen in der Datenbank. Es gibt zwei Lösungen:
Eine besteht darin, die Kodierungsmethode im Code anzugeben, um eine Verbindung zur Datenbank herzustellen:

String url = “jdbc:mysql://localhost:3306/test2?autoReconnect=true&useUnicode=true&characterEncoding=gbk&mysqlEncoding=utf8″ ;

Wenn dies immer noch der Fall ist Funktioniert nicht, verwenden Sie den Befehl

show variables like ‘collation_%&#39;;

Überprüfen Sie den Standardzeichensatz. Wenn es nicht utf-8 ist, ändern Sie die entsprechende Kodierung in my.ini (Windows) oder my.cnf (Linux). ) und starten Sie dann den MySQL-Server neu.

Mehr JSP und Bitte beachten Sie die PHP-Chinese-Website für verwandte Artikel zu Lösungen für das Problem chinesischer verstümmelter Zeichen im Servlet-Betrieb von MySQL!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn