1: Das Formular übermittelt Daten im Post-Modus im Vordergrund:
Wenn der Browser Daten (angenommen „China“) an den Server sendet, muss er die Codetabelle nachschlagen, wenn er die Daten in Binärdaten von 0101 (angenommen 98 99) umwandelt. Welche Codetabelle der Browser zum Öffnen verwendet Auf der Webseite ermittelt der Browser, mit welcher Codetabelle Daten übermittelt werden sollen. Nachdem die Daten den Server erreicht haben, müssen die Daten (98 99) in die Anforderung eingekapselt werden. Der Aufruf der getParameter-Methode des Servlets gibt eine Zeichenfolge („China“) zurück Überprüfen Sie unbedingt die Codetabelle. Da der Ersteller der Anforderung ein Ausländer ist, ist die Standardabfrage ISO8859-1, die häufig von ihnen verwendet wird.
Kopieren Sie den Codecode wie folgt:
Paket com.yyz.request;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//Senden Sie das Formular im Post-Modus
öffentliche Klasse RequestDemo erweitert HttpServlet {
public void doGet(HttpServletRequest-Anfrage, HttpServletResponse-Antwort)
wirft ServletException, IOException {
//Chinesisches verstümmeltes Problem der Anforderungsdaten
request.setCharacterEncoding("UTF-8");//Wir steuern, dass die Client-Webseite UTF-8 ist
String username = request.getParameter("username");
// Das Abrufen von Daten ist normal. Sie können bei der Datenausgabe verschiedene Codetabellen überprüfen
Response.setCharacterEncoding("gb2312");// Benachrichtigen Sie den Server über die Codetabelle, die beim Senden von Daten konsultiert werden soll
Response.setContentType("text/html;charset=gb2312");//Dem Browser mitteilen, mit welcher Codetabelle er geöffnet werden soll
PrintWriter out = Response.getWriter();
out.write(Benutzername);
}
public void doPost(HttpServletRequest-Anfrage, HttpServletResponse-Antwort)
wirft ServletException, IOException {
doGet(Anfrage,Antwort);
}
2: Das Formular übermittelt Daten im Vordergrund im Get-Modus:
Die in der Get-Methode übermittelten Daten werden weiterhin mithilfe der Codetabelle gesendet, die der Browser zum Öffnen verwendet. Der Unterschied besteht darin, dass beim Senden von Daten im Get-Modus die Codierung der Anforderungseinstellung ungültig ist. Auch wenn UTF-8 eingestellt ist, wird ISO8859-1 weiterhin überprüft. Um dieses Problem zu lösen, müssen Sie (??) verwenden, um ISO8859-1 umzukehren. Überprüfen Sie nach dem Abrufen von (98 99) die richtige Codetabelle.
Kopieren Sie den Codecode wie folgt:
Paket com.yyz.request;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//Senden Sie das Formular über die get-Methode
öffentliche Klasse RequestDemo erweitert HttpServlet {
public void doGet(HttpServletRequest-Anfrage, HttpServletResponse-Antwort)
wirft ServletException, IOException {
//Chinesisches verstümmeltes Problem der Anforderungsdaten
request.setCharacterEncoding("UTF-8");//Beim Senden von Daten im Get-Modus ist die Codierung der Anforderungseinstellung ungültig. Auch wenn UTF-8 eingestellt ist, wird ISO8859-1 weiterhin überprüft.
String username = request.getParameter("username");
System.out.println(Benutzername);
Bytequelle [] = Benutzername.getBytes("iso8859-1");
Benutzername = neuer String (Quelle, „UTF-8“);
System.out.println(Benutzername);
}
public void doPost(HttpServletRequest-Anfrage, HttpServletResponse-Antwort)
wirft ServletException, IOException {
doGet(Anfrage,Antwort);
}
}
Drittens: Zusammenfassung des Problems verstümmelter chinesischer Zeichen in den übermittelten Daten:
1. Wenn die Übermittlungsmethode Post ist, müssen Sie die Codierung des Anforderungsobjekts nur festlegen, wenn Sie verstümmelte Zeichen vermeiden möchten.
Hinweis: Auf welche Weise die Clientdaten übermittelt werden, hängt davon ab, auf welche Codierung die Anfrage eingestellt werden soll.
2. Wenn die Übermittlungsmethode get ist, ist die Einstellung der Kodierung des Anforderungsobjekts ungültig. Wenn Sie verstümmelte Zeichen vermeiden möchten, können Sie sie nur manuell konvertieren.
String data = "???????";//verstümmelter String
byte source [] = data.getBytes("iso8859-1");// Holen Sie sich die vom Client übermittelten Originaldaten
data = new String (data.getBytes("iso8859-1"),"UTF-8");//verstümmelte Zeichen lösen
//Gleich
data = neuer String (Quelle, „UTF-8“);
3. Der verstümmelte Code in der Get-Methode kann auch durch Ändern der Serverkonfiguration erreicht werden. Ändern Sie die Datei server.xml im conf-Verzeichnis von Tomact.
3.1
Dieser Ansatz wird nicht empfohlen, da er den Server verändert und nicht flexibel ist.
3.2
Nach dieser Einstellung wird die vom setCharacterEncoding der Anfrage festgelegte Codierung vom Connector verwendet. Obwohl sie flexibler ist als die vorherige Änderung, führt sie dennoch dazu, dass unsere Anwendung stark vom Server abhängig ist, und wird nicht empfohlen.
Viertens: Abschließend möchte ich noch ein kleines Detail erwähnen: Wenn auf die URL-Adresse chinesische Daten folgen, müssen diese URL-codiert sein. Die im Formular übermittelten Parameter enthalten chinesische Daten, und der Browser hilft uns automatisch bei der Codierung. Wenn die chinesischen Parameter jedoch direkt über den Link übermittelt werden, hilft uns der Browser nicht bei der Codierung Das Problem der verstümmelten chinesischen Zeichen durch die zweite Methode oben funktioniert manchmal nicht. Sie sollten es zuerst mit URLEncoding.encode(, „UTF-8“) codieren.