Handle Windows-1252 und Unicode in Java [geschlossen] - Java, Unicode, UTF-8, Zeichencodierung, Bytearray

Nach einer HTTP-Anfrage habe ich ein Byte-Array mit utf-8 kodiert, z. B .:

byte[] array = new byte[]{0xc3, 0xa4, 0xc2, 0x96}

Ich dekodiere das Byte-Array mit new String(array, "utf-8").

Im Beispiel ist das erste dekodierte Zeichen 0xe4 welches den Brief darstellt ä in Unicode - bisher kein Problem. Das zweite Zeichen 0x96 steht für den en Strich in Windows-1252, während es ein Steuerelement namens darstellt spa start of guarded area in Unicode.

Da Java das Zeichen als Unicode interpretiert, erhalte ich einen unsichtbaren Charakter.

Meine Frage: Wie kann ich das Byte-Array korrekt dekodieren? ä– (0xe4 0x2013 in Unicode).

Vielen Dank im Voraus für Sie Hilfe :)

Antworten:

2 für die Antwort № 1

Es scheint, dass Ihr Server das verwirrtDie ISO-Latin-1-Codierung mit der proprietären Windows-1252-Codepage und die codierten Daten sind die Folge davon. Die Windows-1252-Codepage unterscheidet sich nur an wenigen Stellen von ISO-Latin-1.

Sie können die Daten reparieren, indem Sie sie zurück in die Bytes konvertieren, die der Server mit dem falsch angenommenen Latin-1 gesehen hat, und sie anschließend wie folgt als CP1252 interpretieren:

String string = new String(array, "utf-8");
byte[] fix = string.getBytes(StandardCharsets.ISO_8859_1);
string = new String(fix, "Windows-1252");

Speisekarte