dedlfix: Zeichencodierung bestimmen

Beitrag lesen

echo $begrüßung;

Wie kann ich die Zeichencodierung herausfinden?

Es geht nicht. Prinzipiell geht es nicht. Ein Computer kann nicht wissen, was mit einem bestimmten Zahlencode für ein Zeichen gemeint ist, wenn er die Regeln nicht kennt. Man kann beispielsweise herausfinden, ob eine bestimmte Bytesequenz den Regeln der UTF-8-Kodierung entspricht. Man kann aber nicht ermitteln, ob der Autor tatsächlich UTF-8 gemeint hat. Vielleicht ergibt die Bytefolge nur zufällig gültiges UTF-8. Ob x nun u oder was ganz anderes sein soll, kann allenfalls der Mensch aus dem Kontext ermitteln, in dem das x steht. Maschinell ist das auch möglich, aber aufwendig, weil dazu eine Kenntnis der Sprache notwendig ist. Dann kann man mit einer gewissen Wahrscheinlichkeit sagen, für was das Zeichen stehen soll. Dieses Wissen lässt sich jedoch nicht einfach so in einer Funktion unterbringen. Und was macht mb_detect_encoding()? Zu viel versprechen. Das Vorliegen einer bestimmten Multibyte-Kodierung kann man in gewissen Grenzen anhand der Korrektheit der Bytesequenzen vermuten. Bei Einbyte-Kodierungen wie der ISO-8559-Familie ist das ausgeschlossen (ohne Sprachkenntnisse).

Man kann die Rateversuche einschränken, wenn das System bekannt ist, auf dem der Text erstellt worden ist. Dann kann man anhand der dort üblicherweise verwendeten Kodierungen die Kandidaten einschränken. Als nächstes schaut man sich die Bytewerte der Zeichen an und vergleicht mit den Kodiertabellen der infrage kommenden Kodierungen ob sich etwas Sinnvolles ergibt. Je mehr solcher Übereinstimmungen gefunden werden, desto wahrscheinlicher ist das Vorliegen dieser Kodierung. Ein einziger Fehler jedoch wäre ein Ausschlusskriterium (oder eine Datenverfälschung).

Das Einfachste ist immer noch die Kodierung zu kennen und gezielt umzukodieren.

echo "$verabschiedung $name";