it-swarm.com.de

Welche Zeichen werden nicht direkt von Cp1252 auf UTF-8 abgebildet?

Ich habe in mehreren Stackoverflow-Antworten gelesen, dass einige Zeichen bei der Konvertierung von Cp1252 (auch bekannt als Windows-1252) nach UTF-8 nicht direkt zugeordnet werden (oder gar nicht zugeordnet werden können). z.B hier: https://stackoverflow.com/a/23399926/2018047

Kann jemand bitte etwas mehr Licht auf dieses werfen? Bedeutet das, dass ich, wenn ich den Quellcode von cp1252 in utf-8 umwandle, einige Zeichen bekomme, die als Müll enden?

5
Christian

So sieht Windows 1252 Codepage aus.

Wie Sie sehen können, sind den Bytes 0x81, 0x8D, 0x8F, 0x90, 0x9D keine Objekte zugewiesen.

Wenn Ihre Eingabedatei diese Bytes enthält und Sie sie wie eine Windows 1252-Codierung behandeln, werden diese Bytes als ungültige Zeichen behandelt. Unter normalen Umständen bedeutet dies, dass sich die Eingabedatei nicht in Windows 1252 befand.

Alle anderen Bytes codieren entweder druckbare Zeichen oder Steuerzeichen. Alle diese Zeichen sind in Unicode vorhanden und können daher eindeutig in UTF-8 codiert werden.

Ich habe keine Ahnung, was die verknüpfte Antwort zu behaupten versucht, der letzte Absatz klingt wie Unsinn.

Noch einige Bemerkungen, die vielleicht etwas Licht auf das werfen, was Sie kennenlernen wollen:

  • UTF-8 und Windows 1252 sind außerhalb von ASCII völlig inkompatibel

  • beide Kodierungen kodieren niemals Text in bestimmte Bytewerte, jeweils unterschiedliche

  • außerdem sind bestimmte Bytes sequence in UTF-8 ebenfalls ungültig

  • wenn Sie eine Datei so behandeln, als ob sie Text enthält, der in UTF-8 oder Windows 1252 codiert ist, dies jedoch nicht, gehen Daten verloren und werden beschädigt

Sie können die Kodierung Ihrer Dateien in Ihrem IDE oder Editor auswählen. Es wird empfohlen, nur UTF-8 zu verwenden. Sie müssen vorhandene Windows 1252-Dateien konvertieren.

10
Karol S

Die cp1252 Decodierungsfunktion ist meist eine Identitätsfunktion.

cp1252    UCP       (UCP = Unicode Code Point)
--------  --------
21        21 (!)    (All numbers in hex)
31        31 (1)
41        41 (A)

Dies lässt es scheinen wie etwas, das erwartet, dass UCP (nicht UTF-8) auch cp1252 akzeptiert. Der Autor der verlinkten Antwort weist darauf hin, dass dies nicht der Fall ist.

cp1252    UCP
--------  --------
80        20AC (€)
85        2026 (…)
99        2122 (™)

Die Ausnahmen liegen alle zwischen 80 und 9F, einschließlich.

Etwas, das UCP akzeptiert, akzeptiert auch iso-8859-1 , aber nicht cp1252.

1
ikegami