UniCode ist ein universeller Zeichensatz, der Zeichen aus allen Sprachen dieser Welt enthält (bzw. enthalten kann).

Begriffe:

  • UCS-2 ist die 2Byte/16Bit-Repräsentation von Unicode-Zeichen. Damit sind die wichtigsten Zeichen adressierbar.

  • UCS-4 ist die 4Byte/32Bit-Repräsentation von Unicode-Zeichen. Damit sind alle Unicode-Zeichen adressierbar.

  • UTF-8 ist eine Enkodierung, die Unicode-Zeichen auf ein oder mehrere Einzelbyte(s) abbildet. Besondere Eigenschaften macht sie besonders kompatibel:

    • ASCII-Zeichen 0..127 sind in UTF-8 identisch
    • bei Zeichen >127 werden Mehrbyte-Sequenzen gebildet, die aber keine Nullbytes enthalten (was bei C-ähnlichen Sprachen und den damit erstellten Programmen problematisch wäre, weil es dort das Ende der Zeichenkette bedeutet).

  • UTF-7 ist ähnlich wie UTF-8, aber die kodierte Zeichenkette enthält nur reine 7Bit ASCII Zeichen. Diese Kodierung wird selten gebraucht.

  • UTF-16 ist eine Kodierung, bei der die meisten Zeichen wie bei UCS-2 mit 2Byte (16Bit) dargestellt werden. Wo das aber nicht ausreicht, können Zeichen auch mal mit 4Byte (32Bit) mittels sogenannter Ersatzzeichen (engl: surrogate characters) dargestellt werden.

Mini-HowTo

Font für X11

Wenn man keinen Unicode-Font installiert hat, zeigt z.B. Mozilla bei unbekannten Zeichen nur Kästchen mit jeweils 4 Hexzahlen an.

Abhilfe:

# Debian enthält den Font ttf-freefont, der viele Tausend Unicode-Zeichen enthält
apt-get install ttf-freefont

Des weiteren muss noch locale umgestellt werden: LANG=de_DE.UTF-8

Mozilla

Preferences > Appearance > Fonts, Fonts for Unicode:

  • Serif: FreeSerif

  • Sans-serif: FreeSans

  • Monospace: FreeMono

Test

http://www.alanwood.net/unicode/unicode_samples.html - bei z.B. cyrillic und greek sollten dann entspr. Schriftzeichen erscheinen. Eine weitere gute Seite mit Beispielen ist http://www.columbia.edu/kermit/utf8.html

Mit ttf-freefont erscheinen dort die wichtigsten Zeichen der wichtigsten Sprachen - aber obwohl dieser Font einige tausend Zeichen enthält, bleiben auf der Testseite doch noch einige "Hex-Kästchen".

Fragen und Antworten

Frage: Wie ist denn der Stand beim Unicode-Support? Inwieweit gibts Unterstützung vom Betriebssystem, welche Anwendungen funktionieren damit? (Euro-Symbol, gleichzeitige Verwendung von osteuropäischen, türkischen und spanischen Zeichen in einem Text, etc.)

Distributionen:

  • RedHat ist seit Version 8 standardmäßig auf utf-8 eingestellt.

  • SuSE ist seit Version 9.1 ebenfalls standardmäßig auf utf-8 eingestellt.

  • Debian siehe HOWTO

Anwendungen: Standardmäßig werden alle neueren GNOME- / GTK-Programme wie z.B. GRip oder easytag für das Dateisystem utf-8, was zu Problemen führt, wenn der Rest des Systems noch ISO-8859-15 nutzt: es werden keine Umlaute und andere Sonderzeichen angezeigt. Daher kann man den Parameter G_FILENAME_ENCODING=@locale setzen (entweder systemweit in /etc/enviroment oder per User in ~/.xsession).

  • Mozilla 1.3 und 1.5a funktioniert (andere Versionen nicht getestet)

  • Konqueror natürlich auch

  • von xterm gibt es eine Unicode-fähige Variante "uxterm"

  • auf der Textmodus-Konsole wird es schwieriger, siehe ConsoleFonts

  • wily, eine Portierung des sehr seltsamen Editors von Plan9, benutzt ebenfalls Unicode ;)

  • gucharmap und kcharselect sind zwei Programme, mit denen man sich alle Zeichen hübsch ansehen und in die Ablage kopieren kann.
  • KDE - alle KDE-Programme unterstützen utf-8, GNOME (AFIAK) ebenfalls

  • LaTeX - \usepackage[utf8]{inputenc}

Editoren

  • Emacs

  • yudit ist ein Unicode-Editor

  • kate, kwrite, kdevelopp, quanta-plus, kile, etc. ... : alle Editoren aus dem KDE-Projekt

Programmiersprachen:

  • Python unterstützt UCS-2 oder UCS-4 (je nach Compile-Time-Einstellung per configure) und div. Encodings wie UTF-16, UTF-8, ISO 8859-x, usw., die sich beliebig erweitern lassen (siehe u.a. SourceForge für Codec-Projekte).

  • Perl unterstützt UTF-8, näheres hierzu siehe http://www.heise.de/ix/artikel/2000/05/178/

  • Java hat ebenfalls Unicode-Unterstützung

  • C hat prinzipiell auch Unicode-Support, jedoch nicht wirklich einfach (mit wchar).

Betriebssystem:

  • Dateinamen: UTF-8 ist bei Zeichen 0..127 identisch mit ASCII und bei Zeichen-Kodierungen mit mehr als 1 Byte werden keine Nullbytes verwendet. Daher sollte GNU/Linux damit i.d.R. funktionieren.

  • Problematisch ist es immer, wenn eine Anwendung einen anderen Zeichensatz erwartet als man ihr vorsetzt, insbesondere bei UTF-8 <> Single-Byte-Zeichensatz (z.B. Latin-1)

    • Dadurch kann z.B. mit manchen Programmen auf bestimmte Dateinamen nicht zugegriffen werden.
    • /!\ Bei der Verwendung eines Dateisystems in verschiedenen Betriebssystemen ist Vorsicht geboten, am Besten immer den gleichen Zeichensatz verwenden!

Generell:

  • verwendet eine Anwendung UTF-8 und produziert damit Daten, dann sollte der Empfänger der Daten idealerweise auch UTF-8 verstehen, sonst werden z.B. Umlaute als seltsame 2-Zeichen-Kombinationen dargestellt - dies kann mit nicht-UTF-8-fähigen IRC- oder E-Mail-Programmen öfters beobachtet werden. Der Text ist allerdings i.d.R. trotzdem noch verständlich und damit auch nicht tragischer als die seither auftretenden Probleme mit verschiedenen Zeichensätzen.
  • exotische Dinge wie Bidirektionalität (auch "von rechts nach links schreiben"), die Eingabe exotischer, komplexer Zeichen u.ä. kann von den meisten Anwendungen derzeit nicht erwartet werden

Tools:

  • iconv wird seit der glibc 2.1 mitgeliefert, das zwischen den verschiedenen Zeichensätzen konvertieren kann.
  • Das Paket GNU recode unterstützt seit Version 3.5 ebenfalls Unicode.
  • convmv kann automatisch Dateinamen zwischen Zeichensätzen konvertieren.

Migration von Dateien

Zuerstmal sollte man alle Dateinamen migrieren, das geht am Besten mit convmv:

convmv -f iso-8859-15 -t utf-8 -r .

Beim mount kann ebenfalls mitgeteilt werden, wie die Dateinamen kodiert sind (z.b.: mount -t vfat -o utf8 ... ).

Die Konvertierung von Dateiinhalten ist schwieriger, prinzipiell kann und sollte man nur Dateien konvertieren, die ausschließlich Text beinhalten und keine Binärdaten.

  • Office-Dokumente: sind meist binär, kann man bestenfalls innerhalb der Anwendung konvertieren
  • HTML-, XML-, PHP-Dateien: kann man wie reine Textdateien konvertieren, man muss aber zusätzlich die Header ändern
  • reine Textdateien: Konvertierung mit iconv
    find . -type f -name '*.txt' -exec iconv -f iso-8859-15 -t utf-8 -o {}.tmp {} \; -exec mv {}.tmp {} \;

UniCode (zuletzt geändert am 2007年12月23日 22:49:44 durch localhost)

AltStyle によって変換されたページ (->オリジナル) /