Ich bin eine einfache Web-Anwendung mit Java-Entwicklung/jsp/tomcat/mysql, und das Problem liegt auf der Zeichencodierung, weil ich mit UTF-8-Kodierung anstelle des Standard 8851 müssen befassen .java tomcat utf-8-Codierung Ausgabe
Zunächst ich meine Programmstruktur beschreiben möchten. Ich verwende ein Servlet namens Controller.java, um alle Anfragen zu bearbeiten. In web.xml habe ich ein Controller-Servlet, das alle Anfragen von * .do übernimmt.
Dann wird diese Steuerung die Anforderung auf der angeforderten URL versenden basiert, zum Beispiel, wenn der Client für register.do bittet, Controller, um die Anforderung an Register.java versenden.
Und im Register.java, gibt es ein Verfahren, das die Anforderung als Parameter übernimmt, nämlich:
public String perform(HttpServletRequest request) {
do something with the request...
}
Das Problem ist also, wenn ich etwas in UTF-8 innerhalb dieser Methode ausdrucken möchte, es wird zufällige Zeichen geben. Zum Beispiel habe ich eine Enum, die mehrere Konstanten speichert, eine der Eigenschaften der Enum hat ihren Namen in traditionellem Chinesisch. Wenn ich es in
public static void main(Stirng[] args{
System.out.println(MyEnum.One.getChn());
logger.info(MyEnum.One.getChn());
}
drucken, wird dies korrekt in Chinesisch gedruckt. Wenn ich jedoch den genauen Code innerhalb der Methode mit HttpServletRequest Umgang setzen:
public String perform(HttpServletRequest request) {
System.out.println(MyEnum.One.getChn());
logger.info(MyEnum.One.getChn());
}
Sie werden als zufällige Zeichen gedruckt, aber ich kann aus den Debug-Fenstern (Eclipse) sehen, dass die Variablen richtig chinesische Schriftzeichen halten.
So ist nun mal die gleiche Situation, wenn ich den Wert von request.getParameter() gespeichert werden soll. Im Debug-Fenster kann ich sehen, dass die Variable korrekte Zeichen enthält, aber eins drucke ich aus oder versuche es in der Datenbank zu speichern, es sind zufällige Zeichen.
Ich weiß nicht, warum das Verhalten wie diese wirkt, und dies wird mich Wert aus der Lektüre eingereichten Form blockiert und sich in der Datenbank speichern. Könnte jemand dazu Hinweise geben?
Vielen Dank.
Ich kann nicht verstehen, ob Sie über beschädigte Ausgabe auf dem Server der sich Sorgen Konsole und Protokolle, * oder * beschädigt Ausgang in der resultierende Antwort auf den Browser. Könntest Du das erläutern? – erickson
Was ist der Wert von 'System.getProperty (" file.encoding ")'? – erickson
Worüber ich mir Sorgen mache, ist, dass ich im Debug-Fenster die korrekte Kodierung sehen kann, aber wenn ich die Variable an mein Datenbank-Zugriffsobjekt übergebe und es in der Datenbank ablege, wird es zu zufälligen Zeichen. Also dann habe ich festgestellt, dass in der Methode der Umgang mit Anfragen, auch einfach ausdrucken UTF-8 Enum Wert funktioniert nicht. –