2012-10-15 12 views
9

Ich habe ein Zeichensatzproblem mit Literal-String in Java.Java-Literal-String: falscher Zeichensatz zur Laufzeit

Wie Sie in Bild unten sehen können, habe ich ein statisches Objekt namens TITULO mit einem literalen String-Konstanten-Parameter "Título". Wenn ich das Programm starte, wird dieser String als "Tàtulo" gelesen. Ich weiß nicht warum.

Eclipse Debug View

ich die charset Einstellungen bei Eclipse Projekteigenschaften-Fenster und Tomcat-Einstellungen erkunden, aber alle sie sind mit UTF-8 als Option.

Ich verwende Tomcat 7, Eclipse Helios und Windows SO.

Kann mir jemand bei diesem Problem helfen?

+0

Scheint, dass die Konsole auf eine andere Codierung eingestellt ist, vielleicht cp1252 oder latin1. –

+0

Ersetzen Sie "this.id = id" durch "this.id = TITULO". Nun hat this.id 7 Zeichen oder 6. –

+0

@DanielFischer Nicht unbedingt die Konsole, aber vielleicht verwendet Eclipse im Allgemeinen den falschen Zeichensatz? Was passiert, wenn Sie die JVM die Größe des Strings bestimmen lassen? Setzen Sie 'int len ​​= id.length();' und sehen Sie, was der Wert von 'len' im Debugger ist. Dies kann eine JVM-Kodierungsfehlanpassung sein. Diese Informationen werden beim Debuggen über einen Socket übertragen. Vielleicht versucht Eclipse, es mit einer anderen Codierung als Tomcat zu ermitteln. Ansonsten habe ich keine Ahnung. : 3 – Brian

Antwort

1

Die Code-Einstellung, die in Eclipse-Editor ist nicht das gleiche ist der Code, der Kater ausgeführt wird.

Ich habe eine. WAR-Datei im Ordner/Ziel gefunden. Ich habe diese WAR-Datei gelöscht und funktioniert! Der Kater ließ die Klassen aus dieser alten Kriegsakte laufen.

Ich habe dieses laufende Eclipse-Projekt kürzlich in ein Maven-Projekt umgewandelt. Ich habe vielleicht 'mvn-Paket' bei diesem Prozess ausgeführt, der diese WAR-Datei erstellt hat.

Vielen Dank für die Hilfe, die ich diese Lösung gefunden habe.

0

Ich glaube, dass die Zeichenfolge, die Sie suchen (this.id) at ist nicht eigentlich die statische Konstante String Titulo.

Irgendwo in Ihrem Code, lesen Sie die richtige Unicode String Titulo, wandelt es in eine Byte-Array, dann konvertiert es zurück in einen String und übergibt es an den Konstruktor von Style. Die Zeichenfolge wird während der Konvertierung beschädigt. Ich kann nicht mehr sagen, wenn Sie nicht den Stack-Trace des Codes anzeigen, in dem Sie den Konstruktor von Style aufrufen.

+0

ja. Nachdem ich meinen Code geändert habe, um den @ Brian Vorschlag zu testen, weiß ich jetzt, dass mein Code bei Editor nicht der laufende Code ist. Ich suche nach diesem schlechten Code. –

1

Sie könnten versuchen, den Tomcat URIEncoding auf UTF-8 in der server.xml

<Connector port="8090" URIEncoding="UTF-8"/> 
+0

Ich habe das versucht. Aber funktioniert nicht. Neue Information: Ich habe mein Eclipse-Projekt in ein Maven-Projekt geändert. Ich habe 'mvn eclipse: cleane eclipse: eclipse' ausgeführt und das Projekt bei eclipse neu geladen. Ich habe das Eclipse-Projekt und Tomcat Work Directory danach gereinigt. Ich lösche das alte Verzeichnis/bin aus dem Projektordner. Jetzt merke ich, dass Tomcat einen alten Code ausführt. Ich muss herausfinden, wo dieser Code ist ... –

+0

Normalerweise stellt Eclipse den Code für Tomcat hier bereit: .metadata \ .plugins \ org.eclipse.wst.server.core \ tmp0 – Zagrev