Heim  >  Artikel  >  Java  >  Wie man mit verstümmelten chinesischen Zeichen in JSP umgeht

Wie man mit verstümmelten chinesischen Zeichen in JSP umgeht

零到壹度
零到壹度Original
2018-03-21 15:28:101988Durchsuche

Die meisten Entwicklungsplattformen, einschließlich Java, C-Sprache, Python (und noch mehr), verwenden fast alle Chinesisch im Prozess der Codeentwicklung. Wenn der Computer diese Dinge verarbeitet, kann er nicht erkennen, was Sie schreiben. Er kodiert die Daten und wandelt sie in eine Sprache um, die der Computer erkennen und ausführen kann. Wenn der kompilierte Code nicht dekompiliert wird, sehen wir eine Menge unverständliches Kauderwelsch.

Zunächst müssen wir herausfinden, warum verstümmelte Zeichen erscheinen?

Wie verschlüsselt der Server die Daten beim Empfangen und Senden von Daten?
1. Der Server sendet Daten
Beim Senden von Daten folgt der Server der Prioritätsreihenfolge von „response.setCharacterEncoding – contentType – pageEncoding“. Daten werden verschlüsselt. ​
2. Der Server empfängt Daten
Es gibt drei Situationen für den Datenempfang. Bei einem handelt es sich um Daten, die direkt vom Browser über die URL übermittelt werden, und bei den anderen beiden handelt es sich um Daten, die mithilfe der GET- und POST-Methoden des Formulars übermittelt werden.
Da auch die Verarbeitung dieser drei Methoden verschiedener Webserver unterschiedlich ist, nehmen wir Tomcat5.0 als Beispiel.
①Für per POST übermittelte Daten im Format
Solange auf der JSP-Seite anschließend „Response.setCharacterEncoding“ oder „ContentType“ oder „PageEncoding“ auf „utf-8“ gesetzt ist Akzeptieren Es wird kein chinesisches verstümmeltes Problem im JSP/SERVLET der Daten geben.
②Für die von der URL übermittelten Daten und die von der GET-Methode übermittelten Daten im Formular
Es reicht nicht aus, nur den Parameter „request.setCharacterEncoding“ in der JSP festzulegen /SERVLET, das die Daten empfängt
Denn in Tomcat5.0 wird ISO-8859-1 standardmäßig verwendet, um die von der URL übermittelten Daten und die vom GET übermittelten Daten neu zu kodieren (dekodieren). Methode im Formular. Um dieses Problem zu lösen:
Das Attribut useBodyEncodingForURI oder URIEncoding sollte im Connector-Tag des Tomcat-Konfigurationsdateiservers festgelegt werden.
Der Parameter useBodyEncodingForURI gibt an, ob der Parameter request.setCharacterEncoding verwendet werden soll, um die von der URL übermittelten Daten und die von der GET-Methode im Formular übermittelten Daten neu zu kodieren. Standardmäßig ist dieser Parameter falsch ;
Der Unterschied zwischen URIEncoding und useBodyEncodingForURI besteht darin, dass URIEncoding die Daten aller GET-Anfragen einheitlich neu kodiert (dekodiert), während useBodyEncodingForURI die Daten basierend auf dem request.setCharacterEncoding-Parameter der Seite, die auf die Antwort antwortet, neu kodiert Bei der Kodierung (Dekodierung) können verschiedene Seiten unterschiedliche Neukodierungen (Dekodierungen) haben. Daher können Sie für Daten, die per URL übermittelt werden, und Daten, die per GET-Methode im Formular übermittelt werden, den Parameter URIEncoding auf Browser-Codierung ändern oder useBodyEncodingForURI auf „true“ ändern und den Parameter request.setCharacterEncoding auf der JSP-Seite, auf der sich die Daten befinden, auf Browser-Codierung setzen erhalten.

Wenn wir JSP einreichen, müssen wir wegen des Problems mit verstümmeltem Code zunächst herausfinden, warum der verstümmelte Code angezeigt wird.

Sehen Sie sich die JSP-Header-Datei an: <%@ page contentType="text/html;charset=UTF-8" language="java"%>

In dieser Header-Datei gibt es auch ein codierungsbezogenes Attribut: pageEncoding

Lassen Sie uns zunächst über die Rolle von JSP/Servlet sprechen aus mehreren Kodierungen.

In JSP/Servlet gibt es hauptsächlich die folgenden Stellen zum Festlegen der Codierung: pageEncoding="UTF-8", contentType="text/html;charset=UTF- 8", request.setCharacterEncoding("UTF-8") und Response.setCharacterEncoding("UTF-8"), wobei die ersten beiden nur in JSP und die letzten beiden in JSP und Servlet verwendet werden können.
request.setCharacterEncoding("UTF-8") wird verwendet, um die vom Client angeforderte Kodierung für die Neukodierung auf der Serverseite festzulegen. Diese Methode wird verwendet, um die Kodierung anzugeben, die beim erneuten Kodieren (oder Dekodieren) der vom Browser gesendeten Daten verwendet wird.         
response.setCharacterEncoding("UTF-8") wird verwendet, um die Codierung anzugeben, die zum Neucodieren der Serverantwort auf der Clientseite verwendet wird.
Wenn der Server die Daten an den Browser sendet, werden die Daten neu codiert und die Codierung ist die Codierung.

Im Folgenden finden Sie eine Zusammenfassung, wie Sie chinesische verstümmelte Zeichen verhindern können, wenn Sie Tomcat7.0 als WEB-Server verwenden.        
1 Für die gleiche Anwendung ist es am besten, eine einheitliche Codierung zu verwenden, UTF-8 wird empfohlen und natürlich ist auch GBK akzeptabel.
2. Legen Sie pageEncoding="UTF-8" von JSP korrekt fest
3. Legen Sie contentType="text/html;charset= in allen JSP/Servlets fest. 8" oder Response.setCharacterEncoding("UTF-8"), wodurch indirekt die Browser-Kodierung festgelegt wird.
4. Für Get- oder URL-Anfragen, die nicht in einem Formular übermittelt werden, können Sie die Standardkonfiguration von Tomcat ändern. Es wird empfohlen, den Parameter useBodyEncodingForURI auf true zu setzen, oder Sie können URIEncoding festlegen Parameter auf UTF-8 (kann sich auf andere Anwendungen auswirken und wird daher nicht empfohlen). Oder verwenden Sie die folgende Methode zur Verarbeitung beim Empfang von Daten:
request.getParameter("userID"), holen Sie sich den Wert von userID
request.getParameter("userID" ).trim() entfernt die Leerzeichen auf beiden Seiten dieses Werts
request.getParameter("userID").trim().getBytes("ISO-8859-1")) ISO verwenden für Dieser String -8859-1 wird in eine Bytezahl codiert
new String(request.getParameter("userID").trim().getBytes("ISO-8859-1"),"utf - 8") Übergeben Sie die Anzahl der Bytes gerade an den String-Konstruktor, um ein String-Objekt gemäß der „utf-8“-Kodierung zu erstellen.
5. Verwenden Sie die URLEncoder-Methode
, bevor Sie Parameter übergeben:
//Verwenden Sie den angegebenen Codierungsmechanismus, um die Zeichenfolge in eine Anwendung umzuwandeln /x-www-form-urlencoded Format
String username_encoder = URLEncoder.encode(username,"UTF-8");
Nach Erhalt der Parameter verwenden Sie:
//Verwenden Sie den angegebenen Codierungsmechanismus, um die Zeichenfolge application/x-www-form-urlencoded zu dekodieren.
String username_decoder = URLDecoder.decode(request.getParameter(" Benutzername"),"UTF-8");

Das obige ist der detaillierte Inhalt vonWie man mit verstümmelten chinesischen Zeichen in JSP umgeht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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