4 Stimmen

String UTF8-Kodierungsproblem

Der folgende einfache Test ist nicht erfolgreich:

assertEquals(myStringComingFromTheDB, "£");

Schenken:

Expected :£
Actual   :£

Ich verstehe nicht, warum dies geschieht, vor allem wenn man bedenkt, dass die Kodierung der tatsächlichen Zeichenfolge (die als zweites Argument angegeben ist) falsch sein. Die Java-Datei wird als UTF8 gespeichert.

Der folgende Code:

System.out.println(bytesToHex(myStringComingFromTheDB.getBytes()));
System.out.println(bytesToHex("£".getBytes()));

Ausgänge:

C2A3
C382C2A3

Kann mir jemand erklären, warum?

Ich danke Ihnen.

Aktualisierung: Ich arbeite unter Windows 7.

Update 2: Es hat nichts mit JUnit zu tun, das folgende einfache Beispiel:

byte[] bytes = "£".getBytes();
for(byte b : bytes)
{
    System.out.println(Integer.toHexString(b));
}

Ausgänge:

ffffffc3
ffffff82
ffffffc2
ffffffa3

Update 3: Ich arbeite in IntelliJ Idea, ich habe die Optionen bereits überprüft und die Kodierung ist UTF8. Außerdem steht es in der unteren Leiste, und wenn ich das Pfund-Zeichen auswähle und mit der rechten Maustaste anklicke, steht dort "Encoding (auto-detected): UTF-8".

Update 4: Ich habe die Java-Datei mit einem Hex-Editor geöffnet und das Pfund-Zeichen ist korrekt als "C2A3" gespeichert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X