request.getParameter () zeigt die Zeichencodierung im Java-Servlet nicht richtig an

7

Ich habe ein Problem mit UTF-8 in der Java-Servlet-Datei. Wenn ich den Parameterwert in der URL erhalte, habe ich ein Problem mit UTF-8-Zeichen. Japanische Schriftzeichen werden nicht richtig angezeigt.

Jsp Header hat bereits

%Vor%

Ich habe die URIEncoding-Einstellung im Connector zu UTF-8 in server.xml hinzugefügt.

%Vor%

Ich schrieb den Code wie folgt in jsp.

%Vor%

Und dann schrieb ich den Code wie folgt in Java-Servlet.

%Vor%

Ich habe auch mit request.setCharacterEncoding() Methode im Java Servlet getestet, aber es funktioniert nicht wirklich. Obwohl ich viele Möglichkeiten aus Antworten auf das Problem der anderen Leute im Zusammenhang mit Zeichenkodierung in Servlet in Stackoverflow versuchte, kann ich mein Problem nicht lösen, bis.

Was kann ich tun, um die Zeichencodierung korrekt anzuzeigen? Vielen Dank im Voraus.

    
Sandar Min Aye 30.09.2013, 03:47
quelle

3 Antworten

12

Die meisten Server, einschließlich des Apache Tomcat-Servers, sind standardmäßig so konfiguriert, dass sie die Parametercodierung mit ISO-8859-1 ausführen. Ich denke, dass Sie das nicht ändern werden, wenn Sie keine private dedizierte Serverinstanz haben. Die Technik des Programmierers besteht also darin, diese Parameter manuell zu codieren / zu decodieren. Da Sie Javascript verwenden, gibt es die integrierte Funktion encodeURI() oder encodeURIComponent() . Siehe Wie Sie eine URL in JavaScript codieren . Der Code sollte sich ändern

%Vor%

in Java verwenden Sie den Parameter URLDecoder , um den Parameter zurück zu dekodieren.

%Vor%

Hinweis: Wenn Sie Struts2 dispatcher result type verwenden, müssen Sie die Parameter in der Abfragezeichenfolge nicht dekodieren. Diese Parameter werden über UrlHelper analysiert.

Allerdings erinnere ich mich nicht, wenn ich diese Parameter dekodieren werden automatisch in Struts2 dekodiert.

Als Regel sollten Sie wissen, dass wenn Sie Parameter in der URL übergeben, sie URL-codiert sein sollten. Wenn Sie das Formular abschicken, müssen Sie es nicht tun, da das Formular x-www-form-urlencoded lautet, siehe 17.13.4 Inhaltstypen erstellen .

    
Roman C 30.09.2013, 08:39
quelle
8

Testen Sie die Ausgabe mit System.out.println ? Wenn dies der Fall ist, ist es möglicherweise nicht für UTF-8 konfiguriert.

Siehe hierzu: Sonderzeichen (UTF-8) kann nicht von JSP an Servlet gesendet werden: Es werden Fragezeichen angezeigt

Stellen Sie außerdem sicher, dass Sie request.setCharacterEncoding("UTF-8") ausführen, BEVOR Sie die Parameter lesen.

    
stepanian 30.09.2013 05:53
quelle
3

Ich habe einen ähnlichen Fehler und löse den Servlet-Filter, wenn du Spring verwendest, füge einfach diese Definition zu web.xml hinzu

%Vor%

Wenn Sie nicht mit Spring arbeiten, schreiben Sie einen Servlet-Filter wie:

%Vor%     
erhun 16.05.2015 13:34
quelle