Ich entwickle basierend auf Eclipse3.2+j2ee5.0 +tomcat5.09+mysql5.0.
Zunächst können die chinesischen verstümmelten Daten im POST-Format
durch Filter in Echtzeit gefiltert werden. Der Filtercode lautet wie folgt:
package 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;
import javax.servlet.UnavailableException;
öffentliche Klasse SetCharacterEncodingFilter implementiert Filter ...{
protected String-Kodierung = null;
protected FilterConfig filterConfig = null;
protected booleanignore = true;
public void destroy() ...{
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest-Anfrage, ServletResponse-Antwort,
FilterChain-Kette)
throws IOException, ServletException ...{
// Die zu verwendende Zeichenkodierung bedingt auswählen und festlegen
if (ignore || (request.getCharacterEncoding() == null)) ...{
String-Kodierung = selectEncoding(request);
if (Kodierung != null)
request.setCharacterEncoding(encoding);
}
// Kontrolle an den nächsten Filter übergeben
chain.doFilter(request, Response);
}
public void init(FilterConfig filterConfig) throws ServletException ...{
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String-Wert = filterConfig.getInitParameter("ignore");
if (Wert == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
anders
this.ignore = false;
}
protected String selectEncoding(ServletRequest request) ...{
return (this.encoding);
}
}
Filterkonfiguration (Konfiguration web.xml):
<filter>
<Filtername>Zeichenkodierung festlegen</Filtername>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<Filtername>Zeichenkodierung festlegen</Filtername>
<URL-Muster>/*</URL-Muster>
</filter-mapping>
2. Das Problem verstümmelter Zeichen beim Speichern chinesischer Daten in der Datenbank
wird in MySQL einfach umgeschrieben:
jdbc:mysql://localhost:3306/workshopdb? useUnicode=true&characterEncoding=GBK
3. Probleme bei der Übergabe von Parametern über die URL und der Identifizierung chinesischer Dateinamen
. Symptome des Problems: 1. Übergabe von Parametern über die URL, zum Beispiel:
http://localhost:81/crjy/admin/articlelist.jsp?levelId=64&levelName =Student Parteiaufbau
Der über request.getParameter("levleName") erhaltene Wert ist Ranma.
2. Erkennen Sie chinesische Dateinamen, zum Beispiel:
<img src="./pic/Sichuan Map.jpg"> Bilder können nicht angezeigt werden.
Lösung:
1. Wenn Sie nur das erste Problem lösen möchten, ist es sehr einfach, nur zwei Codezeilen zu verwenden:
String role=request.getParameter("chara");
Role=new String(role.getBytes("ISO-8859-1"),"GB2312");
out.println(role);
Weil der Tomcat-Server standardmäßig den ISO-8859-1-Zeichensatz verwendet. Dies kann jedoch nur das erste Problem lösen, nicht jedoch das Problem mit dem chinesischen Dateinamen.
2. Ändern Sie server.xml, suchen Sie die folgende Anweisung und fügen Sie URIEncoding="GB18030" hinzu, sodass die beiden Probleme gemeinsam gelöst werden. keine Rolle erforderlich) =new String(role.getBytes("ISO-8859-1"),"GB2312"); Konvertierung, die erhaltenen Parameter sind normales Chinesisch)
<Connector AcceptCount="100" ConnectionTimeout="20000" debug=" 0"disableUploadTimeout="true" enableLookups="false" maxSpareThreads="75" maxThreads="150" minSpareThreads="25" port="81" restartPort="8443"/>
Darüber hinaus wird in vielen Artikeln vorgestellt, dass Sie URIEncoding="UTF-8" hinzufügen können, um das Problem des chinesischen Dateinamens zu lösen. Wenn Sie jedoch die von der URL über String übergebenen Parameter erhalten, wird Role=request.getParameter("chara"); , erhalten Sie UTF-8-Kodierung, es muss in GB2312 konvertiert werden, was mühsam ist.
Das Obige ist meine Zusammenfassung meiner Verwendung. Ich hoffe, dass jeder wertvolle Meinungen abgeben kann.
http://blog.csdn.net/lijiuu/archive/2007/02/25/1514354.aspx