Im Folgenden werden vier verschiedene Lösungen für verstümmelte Zeichen vorgestellt, die im Wesentlichen die verschiedenen Situationen abdecken, in denen verstümmelte Zeichen in der Webentwicklung auftreten.
Die Lösung mit verstümmeltem Code wird hauptsächlich für die Entwicklungsumgebung Java + MySQL vorgeschlagen. Solange die entsprechenden Änderungen vorgenommen werden, kann sie zur Lösung des Problems mit verstümmeltem Code in verschiedenen Sprachumgebungen verwendet werden.
1. Auf der JSP-Seite werden verstümmelte Zeichen angezeigt
Die folgende Anzeigeseite (display.jsp) erscheint verstümmelt:
Programmcode
<html>
<Kopf>
<title>Chinesische Verarbeitung von JSP</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
out.print("JSP Chinese processing");
%>
</body>
</html>
Für verschiedene WEB-Server und verschiedene JDK-Versionen sind die Verarbeitungsergebnisse unterschiedlich. Grund: Die vom Server verwendete Kodierungsmethode ist unterschiedlich und der Browser zeigt unterschiedliche Ergebnisse für unterschiedliche Zeichen an. Lösung: Geben Sie die Codierungsmethode (gb2312) auf der JSP-Seite an, d. h. fügen Sie Folgendes in die erste Zeile der Seite ein: <%@ page contentType="text/html; charset=gb2312"%>, um verstümmelte Zeichen zu entfernen. Die vollständige Seite lautet wie folgt:
<%@ page contentType="text/html; charset=gb2312"%>
<html>
<Kopf>
<title>Chinesische Verarbeitung von JSP</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
out.print("JSP Chinese processing");
%>
</body>
</html>
2. Wenn das Formular auf Chinesisch gesendet wird, werden verstümmelte Zeichen angezeigt. Unten finden Sie eine Übermittlungsseite (submit.jsp) mit dem folgenden Code:
Programmcode
<html>
<Kopf>
<title>Chinesische Verarbeitung von JSP</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<form name="form1" method="post" action="process.jsp">
<div align="center">
<Eingabetyp="text" name="name">
<input type="submit" name="Submit" value="Submit">
</div>
</form>
</body>
</html>
Das Folgende ist der Code der Verarbeitungsseite (process.jsp):
Programmcode
<%@ page contentType="text/html; charset=gb2312"%>
<html>
<Kopf>
<title>Chinesische Verarbeitung von JSP</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%=request.getParameter("name")%>
</body>
</html>
Wenn die in „submit.jsp“ übermittelten englischen Zeichen korrekt angezeigt werden können, werden bei der Übermittlung der chinesischen Zeichen verstümmelte Zeichen angezeigt. Grund: Der Browser verwendet standardmäßig die UTF-8-Kodierung zum Senden von Anforderungen, und die Kodierungsmethoden UTF-8 und GB2312 stellen Zeichen unterschiedlich dar, sodass Zeichen nicht erkannt werden können. Lösung: Codieren Sie die Anforderung einheitlich über request.seCharacterEncoding("gb2312"), um eine normale Anzeige von Chinesisch zu erreichen. Der geänderte Prozess.jsp-Code lautet wie folgt:
Programmcode
<%@ page contentType="text/html; charset=gb2312"%>
<%
request.seCharacterEncoding("gb2312");
%>
<html>
<Kopf>
<title>Chinesische Verarbeitung von JSP</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%=request.getParameter("name")%>
</body>
</html>
3. Die Datenbankverbindung ist verstümmelt.
Solange alles, was Chinesisch betrifft, verstümmelt ist, besteht die Lösung darin, useUnicode=true&characterEncoding=GBK zur Datenbank-URL der Datenbank hinzuzufügen, und es ist in Ordnung.
4. Die Datenbankanzeige ist verstümmelt
In mysql4.1.0 werden verstümmelte chinesische Zeichen im Varchar-Typ und im Texttyp angezeigt. Für den Varchar-Typ kann das Festlegen als binäres Attribut das chinesische Problem lösen. Für den Texttyp muss eine Codierungskonvertierungsklasse verwendet werden . Die Implementierung ist wie folgt:
Programmcode
öffentliche Klasse Convert {
/** ISO-8859-1-Code in GB2312 konvertieren
*/
öffentlicher statischer String ISOtoGB(String iso){
Zeichenfolge gb;
versuchen{
if(iso.equals("") || iso == null){
zurückkehren "";
}
anders{
iso = iso.trim();
gb = new String(iso.getBytes("ISO-8859-1"),"GB2312");
gb zurückgeben;
}
}
Catch(Ausnahme e){
System.err.print("Kodierungskonvertierungsfehler:"+e.getMessage());
zurückkehren "";
}
}
}
Kompilieren Sie es in eine Klasse, und Sie können die statische Methode ISOtoGB() der Convert-Klasse aufrufen, um die Codierung zu konvertieren.