Lösung für das verstümmelte JSP-Problem
15.07.2009 10:32
1. Der Grund, warum die JSP-Seite verstümmelt ist, liegt darin, dass die Zeichensatzkodierung nicht auf der Seite angegeben ist. Die Lösung: Verwenden Sie einfach den folgenden Code am Anfang der Seite, um die Zeichensatzkodierung anzugeben: <%@ page contentType= „text /html; charset=gb2312“ %>
2. Verstümmelte Zeichen in der Datenbank führen dazu, dass die von Ihnen in die Datenbank eingegebenen chinesischen Zeichen verstümmelt werden, oder dass die von Ihnen in die Datenbank eingegebenen chinesischen Zeichen beim Lesen und Anzeigen ebenfalls verstümmelt werden :
Fügen Sie den codierten Zeichensatz zur Datenbankverbindungszeichenfolge hinzu (dasselbe gilt für Datenquellenverbindungen).
String Url="jdbc:mysql://localhost/digitgulf?
user=root&password=root&useUnicode=true&characterEncoding=GB2312";
Und verwenden Sie den folgenden Code auf der Seite:
Response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("gb2312");
3. Verstümmelte Zeichen bei der Übergabe chinesischer Zeichen als Parameter an eine andere Seite. Die Lösung lautet wie folgt:
Codieren Sie Parameter beim Übergeben von Parametern, z. B. RearshRes.jsp?keywords=" + java.net.URLEncoder.encode(keywords)
Verwenden Sie dann die folgende Anweisung auf der empfangenden Parameterseite, um keywords=new String(request.getParameter("keywords").getBytes("8859_1")); zu erhalten.
Das Kernproblem verstümmelter Zeichen ist immer noch das Problem der Zeichensatzkodierung. Solange dies beherrscht wird, können allgemeine Probleme mit verstümmeltem Code gelöst werden.
------------------------------------------
Seit ich mit Java und JSP in Berührung gekommen bin, beschäftige ich mich ständig mit dem Problem der verstümmelten chinesischen Zeichen. Jetzt ist es endlich vollständig gelöst. Jetzt werden wir unsere Lösungserfahrungen mit allen teilen.
1. Der Ursprung des Java-Chinesisch-Problems
Die Kern- und Klassendateien von Java basieren auf Unicode, was Java-Programme plattformübergreifend gut macht, aber auch einige Probleme mit verstümmelten chinesischen Zeichen mit sich bringt. Es gibt zwei Hauptgründe: das Problem des verstümmelten Codes, das durch die Kompilierung der Java- und JSP-Dateien selbst verursacht wird, und das Problem des verstümmelten Codes, das durch die Interaktion von Java-Programmen mit anderen Medien verursacht wird.
Erstens enthalten Java-Quelldateien (einschließlich JSP) wahrscheinlich Chinesisch, und die Speichermethode von Java- und JSP-Quelldateien basiert auf Byte-Streams. Wenn Java und JSP in Klassendateien kompiliert werden, unterscheidet sich die verwendete Codierungsmethode Wenn die Kodierung inkonsistent ist, werden verstümmelte Zeichen angezeigt. Aufgrund dieser Art von verstümmeltem Code wird empfohlen, kein Chinesisch in Java-Dateien zu schreiben (der Kommentarteil ist nicht an der Kompilierung beteiligt, es spielt keine Rolle, ob Sie Chinesisch schreiben müssen, versuchen Sie, manuell mit den Parametern zu kompilieren). -ecoding GBK oder -ecoding gb2312; für JSP, im Dateiheader Hinzufügen von <%@ page contentType="text/html;charset=GBK"%> oder <%@ page contentType="text/html;charset=gb2312"% > kann diese Art von verstümmeltem Codeproblem grundsätzlich lösen.
Dieser Artikel konzentriert sich auf die zweite Art von verstümmeltem Code, nämlich den verstümmelten Code, der generiert wird, wenn Java-Programme mit anderen Speichermedien interagieren. Viele Speichermedien wie Datenbanken, Dateien, Streams usw. basieren auf Byte-Streams. Wenn ein Java-Programm mit diesen Medien interagiert, erfolgt beispielsweise eine Konvertierung zwischen Zeichen (char) und Bytes (byte). Die im Übermittlungsformular übermittelten Daten zeigen im Java-Programm verstümmelte Zeichen an.
Wenn die im obigen Konvertierungsprozess verwendete Codierungsmethode nicht mit der ursprünglichen Codierung der Bytes übereinstimmt, werden wahrscheinlich verstümmelte Zeichen angezeigt.
2. Lösung
Für den beliebten Tomcat gibt es zwei Lösungen:
1) Ändern Sie D:Tomcatconfserver.xml und geben Sie das Browser-Kodierungsformat als „Vereinfachtes Chinesisch“ an:
Die Methode besteht darin, die zu finden
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" RedirectPort="8443" AcceptCount="100"
ConnectionTimeout="20000" disableUploadTimeout="true" URIEncoding='GBK' />
Tags, fetter Text von mir hinzugefügt.
Sie können wie folgt überprüfen, ob Ihre Änderung erfolgreich ist: Bevor Sie die Änderung vornehmen, klicken Sie in Ihrem IE-Browser, in dem die verstümmelte Seite erscheint, auf das Menü „Ansicht | Kodierung“ und Sie werden feststellen, dass „Westeuropa (ISO)“ ausgewählt ist. Klicken Sie nach der Änderung auf das Menü „Ansicht | Kodierung“ und Sie werden feststellen, dass „Vereinfachtes Chinesisch (GB2312)“ ausgewählt ist.
b) Aktualisieren Sie das Java-Programm. Mein Programm lautet wie folgt:
öffentliche Klasse ThreeParams erweitert HttpServlet {
public void doGet(HttpServletRequest-Anfrage, HttpServletResponse-Antwort)
wirft ServletException, IOException {
Response.setContentType("text/html; charset=GBK");
...
}
}
Es sind fette Schriftarten erforderlich, deren Funktion darin besteht, dem Browser die Konvertierung von Unicode-Zeichen in GBK-Zeichen zu ermöglichen. Auf diese Weise werden der Inhalt der Seite und der Anzeigemodus des Browsers auf GBK eingestellt, sodass keine verstümmelten Zeichen entstehen.
Komplettlösung für Chinesisch unter Tomcat
Ich entwickle derzeit ein Projekt. Der Server ist Tomcat, das Betriebssystem ist Artikel und Meinungen, endlich habe ich es geschafft. Aber ein gutes Gedächtnis ist nicht so gut wie ein schlechter Stift, deshalb habe ich es aufgeschrieben, um zu verhindern, dass ich es vergesse, und auch um eine gute Referenz für diejenigen zu bieten, die auf das gleiche Problem stoßen:
(1) Die JSP-Seite ist auf Chinesisch, aber wenn man sie betrachtet, ist sie verstümmelt:
Die Lösung besteht darin, <%@ page language="java" contentType="text/html;charset=GBK" %> in der Codierung der JSP-Seite zu verwenden. Aufgrund des Codierungsproblems bei der Konvertierung von Jsp in eine Java-Datei Standardmäßig ist es auf einigen Servern ISO-8859-1. Wenn Chinesisch direkt in eine JSP eingegeben wird, wird es definitiv ein Problem geben, wenn Jsp es als ISO8859-1 behandelt. Wir können dies bestätigen, indem wir uns die von Jasper generierte Java-Zwischendatei ansehen.
(2) Wenn Sie das Request-Objekt verwenden, um den vom Kunden übermittelten chinesischen Zeichencode abzurufen, werden verstümmelte Zeichen angezeigt:
Die Lösung besteht darin, einen Filter zu konfigurieren, bei dem es sich um einen Servelet-Filter handelt. Der Code lautet wie folgt:
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;
Die öffentliche Klasse CharacterEncodingFilter implementiert Filter {
private FilterConfig-Konfiguration;
private String-Kodierung = „ISO8859_1“;
public void destroy() {
System.out.println(config);
config = null;
}
public void doFilter(ServletRequest-Anfrage, ServletResponse-Antwort,
FilterChain-Kette) löst IOException, ServletException {
request.setCharacterEncoding(encoding);
//chain.doFilter(Anfrage, Antwort);
chain.doFilter(Anfrage, Antwort);
}
public void init(FilterConfig config) löst eine ServletException {
this.config = config;
String s = config.getInitParameter("encoding");
if (s != null) {
Kodierung = s;
}
}
}
}
Konfigurieren Sie web.xml
<Filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.SetCharacterEncodingFilter</filter-class>
</filter>
<Filterzuordnung>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Wenn diese Situation in Ihrem Fall immer noch auftritt, können Sie nachsehen, ob die von Ihrem Formular übermittelten Daten mit get übermittelt werden. Wenn ja, ist dies kein Problem Schauen Sie sich die vierte Lösung an.
Es gibt auch die Verarbeitung von Informationen, die chinesische Schriftzeichen enthalten. Der Verarbeitungscode lautet:
verpacktbJavaBean;
öffentliche Klasse CodingConvert
{
public CodingConvert()
{
//
}
public String toGb(String uniStr){
String gbStr = "";
if(uniStr == null){
uniStr = "";
}
versuchen{
byte[] tempByte = uniStr.getBytes("ISO8859_1");
gbStr = new String(tempByte,"GB2312");
}
Catch(Ausnahme ex){
}
return gbStr;
}
öffentlicher String toUni(String gbStr){
String uniStr = "";
if(gbStr == null){
gbStr = "";
}
versuchen{
byte[] tempByte = gbStr.getBytes("GB2312");
uniStr = new String(tempByte,"ISO8859_1");
}catch(Ausnahme ex){
}
return uniStr;
}
}
Sie können auch eine direkte Konvertierung durchführen, indem Sie die erhaltene Zeichenfolge zunächst mit ISO-8859-1 codieren, die Codierung dann in einem Byte-Array speichern und das Array dann in ein Zeichenfolgenobjekt konvertieren.
String str=request.getParameter("girl");
Byte B[]=str.getBytes("ISO-8859-1");
Str=neuer String(B);
Durch die obige Konvertierung können alle übermittelten Informationen korrekt angezeigt werden.
(3) Wenn die Formget-Anfrage request.getParameter("name") auf dem Server verwendet, werden verstümmelte Zeichen zurückgegeben; die Einstellung des Filters gemäß der Tomcat-Methode funktioniert nicht, oder die Verwendung von request.setCharacterEncoding("GBK"); Das Problem besteht entweder in Bezug auf die Methode zur Verarbeitung der Parameterübertragung: Wenn Sie die Methode doGet (HttpServletRequest-Anfrage, HttpServletResponse-Antwort) im Servlet verwenden, um sie zu verarbeiten, auch wenn sie zuvor geschrieben wurde:
request.setCharacterEncoding("GBK");
Response.setContentType("text/html;charset=GBK");
Es funktioniert auch nicht, die zurückgegebenen Chinesen sind immer noch verstümmelt! ! ! Wenn Sie diese Funktion in doPost(HttpServletRequest-Anfrage, HttpServletResponse-Antwort) ändern, ist alles in Ordnung.
Wenn Sie zwei JSP-Seiten zum Verarbeiten von Formulareingaben verwenden, kann Chinesisch ebenfalls angezeigt werden, weil die Post-Methode zum Übergeben verwendet wird und die Änderung in die Get-Methode immer noch nicht funktioniert.
Es ist ersichtlich, dass Sie bei der Verwendung der doGet()-Methode im Servlet oder der get-Methode in JSP aufpassen müssen. Schließlich geht es dabei um die Weitergabe von Parameterinformationen über den Browser, was wahrscheinlich zu Konflikten oder Nichtübereinstimmungen in häufig verwendeten Zeichensätzen führt.
Die Lösung ist:
1) Öffnen Sie die Datei server.xml von Tomcat, suchen Sie den Block und fügen Sie die folgende Zeile hinzu:
URIEncoding=“GBK“
Das Ganze sollte wie folgt aussehen:
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" RedirectPort="8443" AcceptCount="100" debug="0" ConnectionTimeout="20000" DisableUploadTimeout=" true" URIEncoding="GBK"/>
2) Tomcat neu starten, alles ist in Ordnung.
Sie können den Grund herausfinden, warum Sie beitreten müssen, indem Sie die Datei unter $TOMCAT_HOME/webapps/tomcat-docs/config/http.html studieren. Es ist zu beachten, dass bei der Verwendung von UTF-8 während des Übertragungsvorgangs verstümmelte Zeichen in Tomcat angezeigt werden. Wenn dies nicht funktioniert, wechseln Sie zu einem anderen Zeichensatz.
(4) Es gibt chinesische Zeichen auf der JSP-Seite und chinesische Zeichen auf den Schaltflächen, aber beim Anzeigen der Seite über den Server werden verstümmelte Zeichen angezeigt:
Die Lösung lautet: Erstens sollte der lokalisierte Nachrichtentext nicht direkt in die JSP-Datei eingefügt werden, sondern der Text sollte über das Tag <bean:message> aus dem Ressourcenpaket abgerufen werden. Sie sollten Ihren chinesischen Text in die Datei Application.properties einfügen. Diese Datei wird unter WEB-INF/classes/* abgelegt. Wenn ich beispielsweise zwei Beschriftungen für Name und Alter auf der Seite habe, muss ich zuerst eine Anwendung erstellen. Der darin enthaltene Inhalt sollte name="name" age="age" sein. Dann lege ich diese Datei unter WEB-INF/classes/properties/ ab und codiere sie dann gemäß der Datei Application.properties, um eine chinesische Ressourcendatei zu erstellen , vorausgesetzt, der Name lautet Application_cn.properties. Der Befehl native2ascii wird im JDK bereitgestellt, der die Konvertierung der Zeichenkodierung realisieren kann. Suchen Sie das Verzeichnis, in dem Sie die Datei „Application.properties“ in der DOS-Umgebung abgelegt haben. Führen Sie den Befehl „Application_cn.properties“ aus, der in GBK codiert ist: „native2ascii ?encoding gbk Application_cn.properties“. der obige Befehl. Zukünftig wird die Datei Application_cn.properties mit folgendem Inhalt generiert: name=u59d3u540d age=u5e74u9f84, konfiguriert in Struts-config.xml: <message-resources parameter="properties.Application_cn"/>. Zu diesem Zeitpunkt ist im Grunde mehr als die Hälfte davon erledigt. Dann müssen Sie <%@ page language="java" contentType="text/html;charset=GBK" %> auf die JSP-Seite schreiben ist Schreiben Sie <bean:message key=“name“> Wenn diese Änderung auf der Seite erscheint, wird auch der chinesische Name auf der Schaltfläche angezeigt.
(5) Der in die Datenbank geschriebene Code ist verstümmelt:
Lösung: Konfigurieren Sie einen Filter, bei dem es sich um einen Servelet-Filter handelt. Der Code ist der gleiche wie beim zweiten Mal.
Wenn Sie über JDBC direkt mit der Datenbank verbunden sind, lautet der Konfigurationscode wie folgt: jdbc:mysql://localhost:3306/workshopdb?useUnicode=true&characterEncoding=GBK. Dadurch wird sichergestellt, dass der Code in der Datenbank nicht verstümmelt wird.
Wenn Sie eine Verknüpfung über die Datenquelle herstellen, ist das oben Gesagte ebenfalls geeignet. Wenn Sie Chinesisch eingeben, ist in der Datenbank auch Chinesisch zu beachten Seite, die die Daten anzeigt. language="java" contentType="text/html;charset=GBK" %>Diese Codezeile. Es ist zu beachten, dass einige Mitarbeiter an der Rezeption Dreamver verwenden, um beim Schreiben eines Formulars auf eine Sache zu achten, und zwar auf die Übermittlung von Aktionen in Dreamver Anfrage, und Sie müssen es senden, da es zwei Methoden der JSP-Übermittlung gibt: POST und GET, aber der von diesen beiden Methoden übermittelte Code unterscheidet sich immer noch stark in Bezug auf die Codierung. Dies wird später erklärt
Zusammenfassung des Artikels:
Hier sprechen wir hauptsächlich über die Lösung des JSP-verstümmelten Problems
1. Das grundlegendste Problem verstümmelter Zeichen.
PHPCE.CN, Designhandbuch
3. Umgang mit verstümmelten Zeichen in der Formular-Get-Übermittlungsmethode.
Wenn Sie die Get-Methode zum Senden von Chinesisch verwenden, wird die Seite, die Parameter akzeptiert, ebenfalls verstümmelt angezeigt. Der Grund für diesen verstümmelten Code ist auch das interne Codierungsformat ISO8859-1 von Tomcat. Tomcat kodiert chinesische Zeichen mit der Standardkodierungsmethode von get, iso8859-1, und hängt sie nach der Kodierung an die URL an, was zu verstümmelten Parametern führt / und von der Seite empfangen wird.
Lösung:
A. Verwenden Sie die erste Methode im obigen Beispiel, um die empfangenen Zeichen zu dekodieren und sie dann zu transkodieren.
B. Get verwendet die URL-Übermittlung und vor der Eingabe der URL wurde eine ISO8859-1-Kodierung durchgeführt. Um diese Codierung zu beeinflussen, müssen Sie useBodyEncodingForURI="true" zum Connector-Knoten in server.xml hinzufügen
Die Attributkonfiguration kann die Codierungsmethode für chinesische Zeichen von Tomcat für die Get-Methode steuern. Das obige Attribut steuert, dass die Get-Übermittlung mithilfe des durch request.setCharacterEncoding("UTF-8") festgelegten Codierungsformats codiert wird. Daher wird es automatisch als utf-8 codiert und die Akzeptanzseite kann es normal akzeptieren. Ich denke jedoch, dass der eigentliche Codierungsprozess darin besteht, dass Tomcat D:Tomcatconfserver.xml ändern und das Codierungsformat des Browsers als „vereinfachtes Chinesisch“ angeben muss:
<Connector-Port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" RedirectPort="8443" AcceptCount="100"
debug="0" ConnectionTimeout="20000" useBodyEncodingForURI="true"
disableUploadTimeout="true" URIEncoding="UTF-8"/> PHPCE.CN, das im Designhandbuch festgelegte URIEncoding="UTF-8" wird erneut codiert, aber da es als utf-8 codiert wurde, wird dies nicht der Fall sein Es hat sich wieder etwas geändert. Wenn die Kodierung aus der URL bezogen wird, wird die empfangende Seite gemäß URIEncoding="UTF-8" dekodiert.
Sie können den Grund für das Hinzufügen ermitteln, indem Sie die Datei unter $TOMCAT_HOME/webapps/tomcat-docs/config/http.html studieren. Sie können folgendermaßen überprüfen, ob Ihre Änderung erfolgreich ist: Bevor Sie die Änderung vornehmen, wird eine verstümmelte Seite angezeigt wird auf Ihrer Seite angezeigt. Klicken Sie im IE-Browser auf das Menü „Ansicht | Kodierung“ und Sie werden feststellen, dass „Westeuropa (ISO)“ ausgewählt ist. Klicken Sie nach der Änderung auf das Menü „Ansicht | Kodierung“ und Sie werden feststellen, dass „Vereinfachtes Chinesisch (GB2312)“ ausgewählt ist.
4. Lösen Sie die verstümmelten Zeichen beim Hochladen von Dateien. Beim Hochladen von Dateien lauten die Formulareinstellungen enctype="multipart/form-data". Auf diese Weise werden Dateien im Streaming-Verfahren übermittelt. Wenn Sie die Upload-Komponente von Apache verwenden, finden Sie viel verstümmelten Code. Dies liegt daran, dass Apaches frühes commons-fileupload.jar einen Fehler aufweist und die chinesischen Zeichen herausgenommen und dekodiert werden. Da diese Methode übermittelt wird, verwendet die Kodierung automatisch das Standardkodierungsformat iso-8859-1 von Tomcat. Das Problem verstümmelter Zeichen ist jedoch: Sonderzeichen wie Punkte, Kommas usw. werden zu verstümmelten Zeichen. Wenn die Anzahl der chinesischen Zeichen ungerade ist, werden verstümmelte Zeichen angezeigt. Wenn es eine gerade Zahl gibt, erfolgt die Analyse normal .
Lösung: Laden Sie commons-fileupload-1.1.1.jar herunter. Diese Version des JAR hat diese Fehler behoben.
Beim Extrahieren des Inhalts müssen Sie jedoch noch die extrahierten Zeichen von ISO8859-1 nach UTF-8 umkodieren. Alle normalen chinesischen Schriftzeichen und Schriftzeichen können abgerufen werden.
5. Java-Code bezüglich der URL-Anfrage, der verstümmelte Parameter empfängt
Das Codierungsformat der URL hängt vom oben erwähnten URIEncoding="UTF-8" ab. Wenn dieses Kodierungsformat eingestellt ist, bedeutet dies, dass alle chinesischen Zeichenparameter der URL kodiert werden müssen. Andernfalls sind die erhaltenen chinesischen Zeichenparameterwerte alle verstümmelt, z. B. ein Link Response.sendDerect („/a.jsp?name=Zhang Dawei“) und werden direkt in a.jsp verwendet
PHPCE.CN, Designhandbuch
String name = request.getParameter("name"); Sie erhalten verstümmelte Zeichen. Da festgelegt ist, dass es sich um UTF-8 handeln muss, sollte die Umleitung wie folgt geschrieben werden:
Nur Response.sendDerect("/a.jsp?name=URLEncode.encode("Zhang Dawei","utf-8");.
Was passiert, wenn dieser Parameter URIEncoding="UTF-8" nicht gesetzt ist, wird das Standardkodierungsformat iso8859-1 verwendet. Das erste Problem besteht darin, dass die Anzahl der Parameterwerte normal analysiert werden kann. Wenn es sich um eine gerade Zahl handelt, wird das letzte Zeichen verstümmelt. Auch wenn das letzte Zeichen auf Englisch ist, kann es normal analysiert werden, die chinesischen Satzzeichen sind jedoch immer noch verstümmelt. Wenn Ihre Parameter keine chinesischen Satzzeichen enthalten, können Sie als Hilfsmittel am Ende des Parameterwerts ein englisches Symbol hinzufügen, um das verstümmelte Problem zu lösen, und dann das letzte Symbol entfernen, nachdem Sie die Parameter erhalten haben. Kann auch abgekratzt oder verwendet werden.
6. In Bezug auf die URL-Anfrage steuert der Skriptcode auch die Seitenumleitung, wenn die empfangenen Parameter verstümmelt sind. Er berücksichtigt auch die angehängten Parameter und analysiert die Parameter auf der empfangenden Seite. Wenn dieser Parameter für chinesische Zeichen die durch URIEncoding="UTF-8" angegebene Kodierungsverarbeitung nicht durchführt, werden auch die von der empfangenden Seite empfangenen chinesischen Zeichen verstümmelt. Die Skriptverarbeitung und -kodierung ist mühsam. Sie müssen über eine entsprechende Datei verfügen, die dem Kodierungsskript entspricht, und dann die Methode im Skript aufrufen, um die chinesischen Zeichen zu kodieren.
7. Bezüglich des verstümmelten Problems beim Öffnen von JSP in MyEclipse kann das Speicherformat der JSP-Datei UTF-8 sein. Wenn Eclipse neu installiert wird, ist das standardmäßig zum Öffnen verwendete Codierungsformat iso8859-1. Daher sind die chinesischen Schriftzeichen in JSP verstümmelt. Dieser verstümmelte Code ist relativ einfach zu lösen. Gehen Sie einfach zu den Einstellungen von Eclipse3.1, suchen Sie nach General->Edidor und stellen Sie die Eröffnungskodierung Ihrer Datei auf utf-8 ein. Eclipse wird automatisch mit dem neuen Codierungsformat erneut geöffnet. Chinesische Schriftzeichen können normal angezeigt werden.
8. Informationen zum verstümmelten Code beim Öffnen der HTML-Seite in Eclipse. Da die meisten Seiten von Dreamweaver erstellt werden, unterscheidet sich ihr Speicherformat von der Erkennung von Eclipse.
Erstellen Sie in diesem Fall im Allgemeinen ein neues JSP in Eclipse, kopieren Sie den Seiteninhalt direkt aus Dreamweaver und fügen Sie ihn in das JSP ein.
PHPCE.CN, Designhandbuch
Dieses Problem mit verstümmeltem Code ist das einfachste Problem mit verstümmeltem Code. Normalerweise werden neue erscheinen. Es handelt sich um den verstümmelten Code, der durch eine inkonsistente Seitenkodierung verursacht wird.
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=iso8859-1"%>
<html>
<Kopf>
<title>Chinesisches Problem</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
</head>
<Körper>
Ich bin ein guter Mensch
</body>
</html>
Codierung an drei Stellen.
Das Codierungsformat ist in erster Linie das Speicherformat der JSP-Datei. Ecljpse speichert Dateien gemäß diesem Kodierungsformat. Und kompilieren Sie die JSP-Datei, einschließlich der darin enthaltenen chinesischen Schriftzeichen.
Die zweite Kodierung ist das Dekodierungsformat. Da als UTF-8 gespeicherte Dateien in ISO8859-1 dekodiert werden, ist Chinesisch definitiv verstümmelt. Das heißt, es muss konsistent sein. Die Zeile, in der sich der zweite Ort befindet, muss nicht dort sein. Das Standardkodierungsformat ist ebenfalls ISO8859-1. Ohne diese Zeile wäre „Ich bin ein guter Mensch“ ebenfalls verstümmelt. Es muss konsistent sein.
Die dritte Codierung dient der Steuerung der Decodierungsmethode des Browsers. Wenn die vorherigen Dekodierungen konsistent und korrekt sind, spielt das Kodierungsformat keine Rolle. Einige Webseiten erscheinen verstümmelt, da der Browser nicht bestimmen kann, welches Codierungsformat verwendet werden soll. Da Seiten manchmal in Seiten eingebettet sind, verwirrt der Browser das Codierungsformat. Es erscheinen verstümmelte Zeichen. PHPCE.CN, Designhandbuch
2. Das Problem verstümmelter Zeichen, die nach dem Absenden des Formulars mit der Post-Methode empfangen werden, ist ebenfalls ein häufiges Problem. Dieser verstümmelte Code wird auch durch das interne Codierungsformat iso8859-1 von Tomcat verursacht. Das heißt, wenn der Beitrag nicht festgelegt ist, wird er in der Methode iso8859-1 übermittelt, sondern im akzeptierten JSP wird in der utf-8-Methode akzeptiert. Dies führt zu verstümmelten Zeichen. Aus diesem Grund finden Sie hier mehrere Lösungen und Vergleiche.
A. Kodierungskonvertierung beim Übernehmen von Parametern
String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8"); In diesem Fall muss jeder Parameter auf diese Weise transkodiert werden. Sehr mühsam. Aber Sie können tatsächlich chinesische Schriftzeichen bekommen.
B. Führen Sie am Anfang der Anforderungsseite den angeforderten Codierungscode request.setCharacterEncoding("UTF-8") aus und legen Sie den Zeichensatz des übermittelten Inhalts auf UTF-8 fest. In diesem Fall müssen Seiten, die diesen Parameter akzeptieren, nicht transkodiert werden. Direkt verwenden
String str = request.getParameter("something"); Sie können die chinesischen Zeichenparameter abrufen. Aber dieser Satz muss auf jeder Seite ausgeführt werden. Diese Methode ist nur für Beitragsübermittlungen wirksam, ist jedoch für enctype="multipart/form-data" beim Senden und Hochladen von Dateien ungültig. Die beiden verstümmelten Zeichen werden später separat erklärt.
C. Um zu vermeiden, dass request.setCharacterEncoding("UTF-8") auf jeder Seite geschrieben wird, wird empfohlen, Filter zu verwenden
Führen Sie die Codierungsverarbeitung durch. Dafür gibt es online viele Beispiele. Bitte überprüfen Sie es selbst