dedlfix: UTF-8 abgespeichert aber Ansi erkannt

Beitrag lesen

Tach!

Warum weiß ein Editor nicht im Vorfeld wie eine Datei formatiert ist?

Dateien haben keine externen Metadaten, in denen solche Informationen wie die Zeichenkodierung hätten eingefügt sein können. Textdateien haben auch keinen Datenblock intern, um Metadaten angeben zu können. So etwas hat man nicht erfunden und deshalb gibt es keine systemübergreifende Möglichkeit für nicht zum Inhalt gehörende Daten. Selbst ein Dateiname benötigt eine Sonderbehandlung innerhalb eines Systems oder ein entsprechend standardisiertes Protokoll, wenn er für den Datenaustausch notwendig ist.

Und so existieren lediglich ein paar Insellösungen, um eine Zeichenkodierung anzugeben. In HTML gibts ein Meta-Element, das ziemlich am Anfang notiert werden muss, und auch nur deshalb richtig gelesen werden kann, weil man annimmt, dass eine zu ASCII kompatible Kodierung verwendet wird.

Für Textdateien allgemein kann man die optionale BOM (Byte-Order-Markierung) verwenden. Eine solche ist vorgeschrieben weil zweingend notwendig bei UTF-16/32 und optional bei UTF-8, weil sie da nicht gebraucht wird. Aber man kann sie dazu verwenden, UTF-8 zu erkennen.

Abspeichern mit BOM kann dein Problem lösen. Aber es kann auch zu anderen Problemen führen, wenn das empfangende/lesende System keine BOM erwartet.

Bzw. was passiert(fällt mir gerade ein) wenn sich diese als Ansi deklarierte(geht ja nicht anders) Datei später, scriptgesteuert oder Editor, ändert? Moment dass muss ich gerade mal testen, lass den Gedankengang aber trotzdem hier stehen...

Wenn der Empfänger keine Angabe zur Kodierung bekommt, kann er nur raten und aus Indizien schließen, was dann auch zu Fehlschlüssen und daraus folgenden Fehler führen kann.

Ok, getestet, es bleibt Ansi. Da ist doch ein Damoklesschwert, wenn man das nicht im Hinterkopf behält?

Stell deine Editor so ein, dass er per Default UTF-8 speichert.

Das löst dein Problem mit dem Erkennen von ANSI aber nicht, weil es dafür keine Lösung gibt, abgesehen von der BOM. Text, der keine Zeichen oberhalb von U+007F verwendet, ist ASCII-kompatibel, und es ist deshalb kein Fehler, wenn der Editor das nicht als UTF-8 erkennt. Es endet dann aber mit ungewollter Kodierung, wenn er hinzukommende Zeichen oberhalb U+007F als ISO-8859-irgendwas/ANSI speichert.

P.S. ASCII ist kein Synonym zu ANSI. ASCII sind die Zeichen von U+0000 bis U+007F kodiert als ein Byte. ANSI ist ein Synonym, das für alle Kodierungen der ISO-8859-Familie und Windows-8-Bit-Kodierungen steht.

UTF-8 kann man anhand der spezifischen und relativ (nicht absolut) eindeutigen Bytefolgen erkennen (wenn denn Zeichen oberhalb von U+007F drin vorkommen). Ein-Byte-Kodierungen hingegen kann man nicht erkennen ohne eine Plausibilitätsprüfung des Inhalts, wozu man Mensch sein muss oder anderweitig Verständnis für Sprachen und deren Rechtschreibung haben muss.

dedlfix.