Zum Inhalt springen

Charset Detection

aus Wikipedia, der freien Enzyklopädie

Die Charset Detection oder Codepagedetection (deutsch: Zeichencodierungserkennung) bezeichnet das heuristische Erkennen der Zeichenkodierung einer Bytefolge, die einen Text darstellt. Dieses Verfahren wird in Webanwendungen wie Webbrowsern (z. B. Firefox[1]), E-Mail-Clients und Suchmaschinen eingesetzt.[2] Die Erkennung gilt als unzuverlässig und wird vor allem dann eingesetzt, wenn konkrete Metadaten, etwa ein HTTP-Content-Type-Header oder eine Byte Order Mark, nicht vorhanden sind oder nicht als vertrauenswürdig gelten.[3]

In der Regel erfolgt die Erkennung mittels statistischer Analyse von Byte-Mustern. Dieselbe Analyse kann auch zur Spracherkennung genutzt werden. Da sie auf statistischen Daten beruht, ist sie nicht zuverlässig.[4]

Eine falsche Erkennung führt zu Mojibake, wenn Bytefolgen falsch interpretiert und somit in einem abweichenden Zeichensatz angezeigt werden.[5][6]

Beispiel der fehlerhaften Darstellung der Umlaute

Erkennbarkeit verschiedener Codierungen

[Bearbeiten | Quelltext bearbeiten]

Eine der wenigen zuverlässig erkennbaren Codierungen ist UTF-8. Grund dafür ist der große Anteil ungültiger Bytesequenzen. Daher ist es extrem unwahrscheinlich, dass Text in einem anderen Zeichensatz einen gültigen UTF-8-Test besteht. Fehlerhafte Erkennungsverfahren testen jedoch nicht zuerst auf UTF-8 und können so etwa bei einer Website im UTF-8-Zeichensatz den deutschen Stadtnamen München fälschlich als München darstellen, da die Erkennung vorschnell auf ISO-8859-1 oder Windows-1252 tippt.

Auch UTF-16 ist durch seinen charakteristischen Aufbau deutlich erkennbar: Häufig auftretende Steuerzeichen wie Zeilenumbrüche (U+000A) oder Leerzeichen (U+0020) erscheinen regelmäßig in der 16-Bit-Struktur, außerdem treten viele Nullzeichen auf, die an allen geraden oder ungeraden Stellen zu finden sind. Einfaches Prüfen der Gültigkeit reicht jedoch nicht aus, wie das bekannte Beispiel des Satzes Bush hid the facts (siehe unten) zeigt: Dieser konnte von Microsoft Windows fälschlich als chinesisches UTF-16LE interpretiert werden.

Besonders schwierig ist die Erkennung verschiedener ISO-8859-Zeichensätze in Europa. Diese eng verwandten 8-Bit-Codierungen überschneiden sich im unteren Bereich mit ASCII, sodass sämtliche Bytesequenzen gültig erscheinen. Eine eindeutige Unterscheidung ist technisch nicht möglich und kann lediglich mit sprachstatistischen Methoden, wie zum Beispiel der Überprüfung der Buchstabenhäufigkeiten, versucht werden.

Da heuristische Verfahren fehleranfällig sind, wird empfohlen, Datensätze stets korrekt mit einer Zeichensatzangabe zu versehen. Auch bei UTF-8 oder UTF-16, die leicht erkennbar sind, verlangen manche Systeme eine explizite Kennzeichnung, zum Beispiel durch ein verwendetes BOM.[7]

Bekannte Problemfälle

[Bearbeiten | Quelltext bearbeiten]
Ein- und Ausgabe beim Satz Bush hid the facts

Die Betriebssystemfunktion IsTextUnicode[8] von Microsoft Windows verwendet eine statistische Analyse, die bei bestimmten Eingabezeichenfolgen ein falsches Ergebnis liefert. Weil die Funktion in älteren Versionen des Windows Texteditors direkt eingebunden wurde, konnte das falsche Verhalten mit einfachen Mitteln nachvollzogen werden. Bekannt wurde der Satz Bush hid the facts (englisch für Bush hat die Fakten verschleiert), der, wenn im Windows Editor abgespeichert, nicht mehr wiederhergestellt werden kann. Wird die Datei geöffnet, erscheint stattdessen eine wirre Kette chinesischer Schriftzeichen (畂桳栠摩琠敨映捡獴).

Obwohl der Satz Bush hid the facts am bekanntesten für das Auftreten dieses Fehlers ist, kann der Bug auch durch andere Textstrings ausgelöst werden, etwa hhhh hhh hhh hhhhh, this app can break oder sogar kurze Zeichen wie a oder z!.[9]

Der Fehler existierte bereits seit Einführung von IsTextUnicode in Windows NT 3.5 im Jahr 1994, wurde aber erst Anfang 2004 entdeckt, während der Präsidentschaft von George W. Bush. Viele Texteditoren und Werkzeuge auf Windows-Systemen nutzen diese Funktion zur Zeichensatzbestimmung, weshalb sie von dem Bug betroffen sind.[10]

Seit Windows Vista wurde der Editor so angepasst, dass er eine andere Erkennungsmethode verwendet, die den Fehler nicht mehr zeigt. Die Funktion IsTextUnicode selbst ist jedoch unverändert und wird daher von anderen Computerprogrammen weiterhin verwendet.[11]

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. EncodingDetector.h - mozsearch. Abgerufen am 25. September 2025.
  2. Shabanali Faghani, Ali Hadian, Behrouz Minaei-Bidgoli: Charset Encoding Detection of HTML Documents. In: Information Retrieval Technology. Band 9460. Springer International Publishing, Cham 2015, ISBN 978-3-319-28939-7, S. 215, doi:10.1007/978-3-319-28940-3_17.
  3. PHP: mb_detect_encoding - Manual. Abgerufen am 24. September 2025 (englisch).
  4. Wayback Machine. Abgerufen am 24. September 2025.
  5. Ritchie S. King: Will unicode soon be the universal code? [The Data]. In: IEEE Spectrum. Band 49, Nr. 7, Juli 2012, ISSN 1939-9340, S. 60–60, doi:10.1109/MSPEC.2012.6221090 (ieee.org [abgerufen am 24. September 2025]).
  6. Raymond Chen: A program to detect mojibake that results from a UTF-8-encoded file being misinterpreted as code page 1252. In: The Old New Thing. 1. Juli 2019, abgerufen am 24. September 2025 (amerikanisches Englisch).
  7. A composite approach to language/encoding detection. Abgerufen am 24. September 2025.
  8. IsTextUnicode-Funktion (winbase.h) - Win32 apps. Microsoft, 3. März 2024, abgerufen am 6. Oktober 2025 (deutsch).
  9. Bush hid the facts: Windows-Bug – verbotene Sätze in Notepad. 18. März 2025, abgerufen am 24. September 2025.
  10. Raymond Chen: Some files come up strange in Notepad. In: The Old New Thing. 24. März 2004, abgerufen am 24. September 2025 (amerikanisches Englisch).
  11. Bush might've still hid the facts, but he can't hide them from Vista SP1/Server 2008 Notepad! Abgerufen am 24. September 2025.