Java konvertieren von Windows-1252 zu UTF-8, einige Buchstaben sind falsch
Erhalte ich Daten aus einer externen Microsoft SQL 2008 Datenbank (ich Abfragen mit MyBatis). In theroy ich Daten Codierung auf "Windows-1252".
Ich versuche dekodierten Daten mit diesem code:
String textoFormado = ...Wert von MyBatis... ;
String s = new String(textoFormado.getBytes("Windows-1252"), "UTF-8");
Fast alle der String wird korrekt entschlüsselt. Aber einige Buchstaben mit acents nicht.
Beispiel:
- Ich Empfangen von Daten Basis dieser Zeichenfolge: "�vila"
- Ich mit dem obigen code und diese machen diesen String: "�?vila"
- Ich erwartet, dass diese Zeichenfolge: "Ávila"
Brechen Sie Ihre Linie in zwei Aussagen, so können Sie einen Blick auf die intermediate-Schnur. Das wird Ihnen helfen, zu sehen, was die Ursache des Problems sein könnte.
Danke. Aber ich habe versucht String s = new String(mistring.getBytes("Windows-1252")); aber das Ergebnis ist das gleiche.
Die variable textoFormado ist bereits eine Zeichenfolge, die Sie einfach verwenden können, in Ihrem Programm. Warum denken Sie müssen das Kodieren und Dekodieren es wieder?
Da diese Zeichenfolge den text "Ã�vila" (es ist recived aus der Datenbank von MyBatis) und ich brauche "Ávila".
Wie sind Sie mit dem abrufen der String von MyBatis? Das ist, wo Sie benötigen, um mit einem charset-Konvertierung von Windows-1252 zu UTF-16 (Java native String encoding). Auch wenn Sie
Danke. Aber ich habe versucht String s = new String(mistring.getBytes("Windows-1252")); aber das Ergebnis ist das gleiche.
Die variable textoFormado ist bereits eine Zeichenfolge, die Sie einfach verwenden können, in Ihrem Programm. Warum denken Sie müssen das Kodieren und Dekodieren es wieder?
Da diese Zeichenfolge den text "Ã�vila" (es ist recived aus der Datenbank von MyBatis) und ich brauche "Ávila".
Wie sind Sie mit dem abrufen der String von MyBatis? Das ist, wo Sie benötigen, um mit einem charset-Konvertierung von Windows-1252 zu UTF-16 (Java native String encoding). Auch wenn Sie
getBytes()
sollten Sie angeben Windows-1252
statt UTF-8
im String
Konstruktor, da Sie nicht den Umgang mit UTF-8-bytes, die an alle.InformationsquelleAutor Ramon | 2014-04-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Offensichtlich
textoFormado
ist eine variable vom TypString
. Dies bedeutet, dass die bytes, die bereits dekodiert wurden. Java dann intern ein 16-bit-Unicode-Darstellung. Was du gemacht hast, ist die Codierung der Zeichenfolge mit Windows-1252, gefolgt von dem Lesen der resultierenden bytes mit UTF-8-Codierung. Das funktioniert nicht.Was Sie brauchen, ist die richtige Kodierung beim Lesen der bytes:
Für die Verwendung dieser Zeichenfolge in Ihrem Programm, Sie brauchen nicht, etwas zu tun. Benutzt es einfach. Wenn - aber - Sie schreiben wollen, die Daten wieder zu einer Datei, zum Beispiel, müssen Sie codieren wieder:
Verwenden
textoFormado.getBytes("Windows-1252")
statt. Vergessen Sie UTF-8, es gilt nicht, in dieser situation, und Sie verwenden es trotzdem richtig.InformationsquelleAutor Seelenvirtuose
Ich es gelöst danke an alle.
Habe ich das nächste Projektstruktur:
zuerst hatte ich (MyBatis und Spring injizieren von Abhängigkeiten und Parameter):
Die Lösung:
InformationsquelleAutor Ramon