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:
<%@ page language="java" pageEncoding="UTF-8" %. >
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_%';
Ü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!