Zeichenkodierung - Umlaute in Siedler

Einleitung

Wir alle kennen das Problem mit den Umlauten. Sie werden nicht ohne Umlaute-Funktion dargestellt. Tja, das dachten wir bisher. Doch da steckt noch viel mehr dahinter. Folgend erkläre ich etwas über Zeichenkodierung. Wen das nicht interessiert, der möge gleich bei der Folgerung weiterlesen.

Es ist nicht egal wie eine LUA-Datei codiert wird!

Beobachtung

Als Standard erstellt Notepad++ - und so ziemlich jeder andere Windows-Quellcodeeditor - eine normale Datei im ANSI-Format. Lässt man dann im Spiel eine Zeichenkette ausgeben sieht man an der Stelle des Umlauts nur einen Kasten mit einem Fragezeichen drin.

Schalten wir nun die allseits bekannte Umlaute-Funktion dazwischen, verschwinden die unbekannten Zeichen und wie durch Zauberhand stehen die Umlaute im Text.

Doch was passiert, wenn man eine UTF8-codierte Datei läd? Es wird keine Umlaute-Funktion benötigt. Aber wieso?

Erklärung

Die ersten 127 Zeichen einer jeden Zeichencodierung sind gleich. Ansonsten kann man sich in der Informatik auf nichts verlassen.

Dieses Zitat beinhaltet viel wahres. Sowohl ANSI als auch UTF8 verwenden für die ersten 127 Zeichen (u.a. alle Zahlen und das Alphabet) die gleiche Byte-Codierung.

Zeichenkodierung in ANSI

ANSI (American National Standards Institute) ist eine auf dem ASCII-Code aufbauende Zeichencodierung, die von Microsoft- und Apple-Betriebssystemen als Standard verwendet wird.

Für das Internet und viele anderen Bereiche ist ANSI jedoch bereits veraltet und fast deckend durch UTF8 abgelöst. Grund dafür ist, dass ANSI zwar nicht nur 7 Bit lange Zeichen und damit maximal 128 Zeichen ermöglicht, jedoch auf 8 Bit und damit 255 Zeichen beschränkt ist. Damit lassen sich z.B. keine chinesischen Schriftzeichen darstellen.

Zeichenkodierung in UTF8

UTF8 besteht nicht aus einem Zeichen mit 8 Bit pro dargestelltem Zeichen sondern aus einem 16 Bit Wort pro dargestelltem Zeichen. Ein Wort besteht eigentlich aus zwei 8 Bit großen Bytes. Dadurch ergeben sich keine 255 Codes sondern 255 * 255, sprich 65025 Codes. Das reicht für alle möglichen Umlaute aller lateinischen Sprachen und sogar alle chinesischen Schriftzeichen aus . Um UTF8 zu identifizieren, gibt es die so genannte BOM. Dabei handelt es sich um 3 spezielle Zeichen am Dateianfang. Im Gegensatz zu UTF16 und UTF32 ist es hier jedoch erlaubt BOM wegzulassen.

Man kann also eine Datei UTF8 codieren und ohne BOM abspeichern. Dann hält Windows das Format für ANSI und wird die 16 Bit Wörter entsprechend in 2 8 Bit Zeichen umwandeln.

ä: ä
ö: ö
ü: ü
ß: ß
Ä: Ä
Ö: Ã-
Ü: Ãœ

Siedler und UTF8

Alle Skripte werden vom Interpreter automatisch in UTF8 umgewandelt. Importiert man eine Skriptdatei im ANSI-Format, werden die Umlaute in ein anderes Zeichen umgewandelt. Bei der impliziten Umwandlung von ANSI in UTF8 entstehen jedoch andere Zeichen.

ä: 䍊
ö: 捊
ü: 썊
ß: ߍ
Ä: č
Ö: ֍
Ü: ܀

Diese können jedoch vom Spiel nicht dargestellt werden.

Ließt das Spiel jetzt die Umlaute-Funktion ein werden auch die Zeichen in ihr umgewandelt und es entstehen diese sonderbaren Zeichen. Die Umlaute-Funktion sucht dann also nicht nach den Umlauten sondern nach diesen Zeichen und tauscht sie mit der Ersatzzeichenkette aus.

Importiert man eine UTF8 codierte Datei (ohne BOM) werden die Zeichen nicht verändert und die Umlaute bleiben Umlaute. Da Siedler intern UTF8 verwendet, können diese Umlaute problemlos dargestellt werden.

Folgerung

Speichern wir alle unsere Dateien im UTF8-Code, wird die Umlaute-Funktion überflüssig.

Wenn dein Texteditor nicht die Möglichkeit bietet ANSI in UTF8 zu konvertieren, musst du die Datei erst leer anlegen und dann umschalten auf den anderen Zeichensatz.

Alle Zeichen, die dann über Eingabe - egal ob von der Tastatur oder aus dem Clipboard - eingefügt werden, sind dann automatisch UTF8, egal welches Format die Datei hatte aus der sie evtl. kopiert wurde.

UTF-8 einstellen

  • SynWrite: Zeichencodierung > Konvertiere Zeichencodierung nach > Unicode > UTF-8 (ohne BOM)
  • Notepad++: Format > Kodiere als ANSI und Kodiere als UTF-8 ohne BOM
  • SciTE: File > Encoding > UTF-8
  • Editra: Preferences > General > Files > Preferred Encoding
Sofern nicht anders angegeben, steht der Inhalt dieser Seite unter Lizenz Creative Commons Attribution-ShareAlike 3.0 License