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.