Ich habe einen solchen Link in der JSP-Seite mit der Kodierung big5 Ссылка Und wenn ich es in die URL-Leiste des Browsers eingebe, wird es in etwas wie geändert Ссылка Und wenn wir diesen Parameter in der JSP-Seite haben wollen, sind alle Zeichen beschädigt.
Und wir haben folgendes festgelegt: request.setCharacterEncoding ("UTF-8"), so dass alle Anfragen in UTF8 konvertiert werden.
Aber warum funktioniert das in diesem Fall nicht? Danke im Voraus!.
Wenn Sie die URL in die Adressleiste des Browsers eingeben, kann der Browser die Zeichencodierung vor der URL-Codierung konvertieren. Dieses Verhalten ist jedoch nicht gut definiert, siehe meine Frage
Umgang mit Zeichencodierung in URI auf Tomcat
Wir bekommen meistens UTF-8 und Latin-1 auf neueren Browsern, aber wir bekommen alle Arten von Codierungen (einschließlich Big5) in alten. Daher ist es am besten, Nicht-ASCII-Zeichen in URL zu vermeiden, die vom Benutzer direkt eingegeben werden.
Wenn die URL in JSP eingebettet ist, können Sie sie in UTF-8 erzwingen, indem Sie sie wie folgt erzeugen:
%Vor%Auf Tomcat muss die Codierung auf Connector wie folgt angegeben werden,
%Vor% Sie müssen auch request.setCharacterEncoding("UTF-8")
für die Körpercodierung verwenden, aber es ist nicht sicher, dies im Servlet einzustellen, da dies nur funktioniert, wenn der Parameter nicht verarbeitet wird, aber andere Filter oder Ventile die Verarbeitung auslösen können. Also solltest du es in einem Filter machen. Tomcat kommt mit einem solchen Filter in der Quelldistribution.
Um zu vermeiden, mit dem server.xml
zu spielen, benutze:
Um diese Parameter tatsächlich auf Tomcat zu erhalten Sie müssen etwas wie tun:
%Vor% Wie anscheinend (?) request.getParameter
URLDecodes () die Zeichenkette und interpretiert sie als iso-8859-1
- oder was auch immer URIEncoding
in server.xml
festgelegt ist. Ein Beispiel dafür, wie man den URIEncoding
charset von server.xml
für Tomcat 7 bekommt, finden Sie unter hier
Sie können keine Nicht-ASCII-Zeichen in einer URL haben - Sie müssen sie immer in Prozent kodieren. Browser haben dabei Schwierigkeiten, sie zu rendern. Rendern funktioniert am besten, wenn Sie die URL in UTF-8 codieren und dann percent-encodieren. Für Ihre spezifische URL würde dies http://hello/world?name=%E5%A9%80%E3%84%89
ergeben (überprüfen Sie in Ihrem Browser, was es ist gibt für diesen speziellen Link). Wenn Sie den Parameter in JSP abrufen, müssen Sie ihn explizit aufheben und ihn dann von UTF-8 dekodieren, da der Browser ihn unverändert sendet.
Ich habe zu diesem Thema ziemlich viel gesucht, also könnte dies anderen helfen, die dasselbe Problem mit Tomcat haben. Dies stammt aus Ссылка .
(So verwenden Sie UTF-8 überall).
<Connector>
in server.xml. Referenzen: HTTP-Connector, AJP-Connector. <jsp:directive.page contentType="text/html; charset=UTF-8" />
für die Seiten in XML-Syntax (alias JSP-Dokumente). Tags und Links java character-encoding request