Main-Page

Encodings

࿇äⵣషஓෆᚏ𐂃Фäᐌぴ啤φçⰖᨐ⠫ㄠ𐎽

Geschichtliches und "Was ist ein Encoding?"

Auch wenn man in der Computerwelt häufig von plain-Text redet, gibt es so etwas nicht wirklich! Ein Computer rechnet und speichert Informationen mit 0 und 1, man musste also eine Möglichkeit finden Buchstaben, Zahlen und Sonderzeichen binär darzustellen und zu speichern.
Es wurden also Übersetzungstabellen, so genannte Character sets (kurz: Charsets) eingeführt, diese verbinden eine Bit-Folge mit darstellbaren Zeichen. Ein Encoding/eine Kodierung ist die Regel mit der die Bits einem Zeichen zugeordnet werden, die Begriffe werden oft synonym behandelt, sind jedoch nicht unbedingt synonym. Im Laufe der Zeit entstanden Tausende von Zeichensätzen, doch die meisten von ihnen verschwanden wieder. Eines der ersten war, das teilweise heute noch verbreitete, ASCII (1963).

Die druckbaren ASCII Zeichen

ASCII

ASCII belegt 7-Bit, und kann damit 27 also 128 Zeichen darstellen, davon sind 95 druckbare Zeichen und 33 nicht-druckbare. Umlaute und andere Sonderzeichen bleiben außen vor. Rechts sehen Sie alle druckbaren ASCII-Zeichen.

ISO 8859

Da die wenigen Zeichen die ASCII bot, nicht ausreichten wurden 15 Charsets unter der Norm ISO 8859 standardisiert. ISO 8859 belegte 8 Bit, konnte also maximal 256 Zeichen darstellen. Von diesen 15 Encodings sind ISO 8859-1, ISO 8859-15 und das auf ISO 8859-1 basierende Windows-1252 (welches oft falscherweise als ANSI bezeichnet wird) heute die wichtigsten. Bei ISO 8859 wurden geschickterweise die ersten 128 bei allen Teilnormen identisch direkt aus ASCII kopiert. Dadurch blieb ISO 8859 zu ASCII kompatibel. In zehn der fünfzehn ISO 8859 sind die deutschen, sowie die meisten west- und mitteleuropäischen Sonderzeichen (ä,ö,ü,é,è,ç,ô...) vorhanden, sie sind Latin 1-10 genannt. Auch für viele andere Zeichen gibt es Unternormen von ISO 8859. Doch spätestens für fernöstlichen Sprachen war ISO 8859, mit maximal 256 Zeichen, ungeeignet.

Unicode

Nach einiger Zeit beschloss das 1991 dafür neu gegründete Unicode Consortium das unmögliche wahr zu machen, eine Zeichentabelle zu erstellen in der alle Zeichen oder Textelemente die es auf der Welt gibt vorhanden sind. Die Zeichentabelle wurde Unicode gennant, es sei darauf hingewiesen das Unicode jedoch kein Encoding, sondern nur eine Zeichentabelle (Charset) ist. Die erste Version von Unicode benützte 16-Bit konnte also 65.536 Zeichen darstellen, es stellte sich jedoch schnell heraus das dies unzureichend war, also wurde mit der Version 2.0 der Codebereich um weitere 16 je 16 Bit große Bereiche, sogenannte Planes, somit sind 17*216 also 1.114.112 Zeichen verfügbar. Davon sind in der aktuellen Version 5.0.0 etwas mehr als 99.000 Zeichen, also ca. 8,88% belegt. Die ersten 65.536 Zeichen nennt man jetzt den "Basic Multilingual Plane" (BMP).
Die Planes sind:

Über die Verwendung der Planes gibt die Englischsprachige Wikipedia Auskunft.
Unicode ist ebenso wie ISO-8859-1 kompatibel zu ASCII, man hat um die Kompatibilität zu verbessern etliche Encodings komplett kopiert. Dass dabei Doppelungen vorkammen versteht sich von selbst, so gibt es zum Beispiel 19 Leerzeichen.
Es gibt verschiedene auf Unicode basierende Encodings die wichtigsten sind heute UTF-8 und UTF-16 , wobei UTF-8 sehr viel verbreiterter ist, da es weniger Platz als UTF-16 belegt und trotzdem alle Unicode zeichen darstellen kann.

ISO/IEC 10646, Universal Character Set

Paraell zu Unicode entwickelten die Normungsorganisationen ISO und IEC das Universal Character Set, auch ISO/IEC 10646 genannt, seit 1991 arbeiten jedoch ISO und das Unicode Consortium zusammen und UCS und Unicode sind so gut wie identisch.


Auf Unicode basierende Encodings

UTF-8

Unicode braucht eigentlich 4 Byte für jedes Zeichen. Da dies in Vergleich zu anderen Encodings sehr viel ist, wurde UTF-8 entwickelt. UTF-8 braucht für verschiedene Zeichen unterschiedlich viele (1 - 6) Byte. Ob ein Byte nun ein einzelnes Zeichen ist, oder ob mit dem vorherigen oder mit dem nächsten Byte zusammenhängt, entscheidet UTF-8 mithilfe der ersten Bits des Bytes.
Beginnt ein Byte mit einer '0', so ist es ein allein stehendes Byte, die Werte nach der Null entsprechen der dualen Unicode-Nummer von 00000000 00000000 bis 00000000 01111111 und damit auch der gleichen ASCII-Nummer.
Beginnt ein Byte jedoch mit '110' so gehört es mit dem nachfolgendem Byte zusammen, dieses fängt mit '10' an. Die Nummer nach dem '110' zusammen mit der Nummer nach dem '10' des zweiten Bytes ergeben die Unicode-Nummer.
'1110' kennzeichnet den Beginn eines 3 Byte langes Zeichen. Beide folgenden Bytes fangen mit '10' an.
Will man einen mehr als 16 Bit langen Kode speichern, so nimmt man für das erste Byte ebenfalls '1110' und fügt einfach mehr (bis zu 6) Bytes mit einem '10' an.

Unicodezeichen
von (Dezimal, Hexadezimal)

bis
Bitfolge in UTF-8
00000000 00000000 (0, 0) 00000000 01111111 (127, 7F) 0xxxxxxx
00000000 10000000 (128, 80) 00000111 11111111 (2047, 7FF) 110xxxxx 10xxxxxx
00001000 00000000 (2048, 800) 11111111 11111111 (65535, FFFF) 1110xxxx 10xxxxxx 10xxxxxx
00000001 00000000 00000000 (65535, FFFF) 00111111 11111111 11111111 (4194303, 3FFFFF) 1110xxxx 10xxxxxx 10xxxxxx 10xxxxxx

UTF-16

UTF-16 funktioniert ähnlich wie UTF-8, allerdings benützt UTF-16 16 Bit als kleinste Datenblock Einheit. Alle Zeichen im BMP (Zeichen 1-65535) belegen 2 Byte, alle darüber 2*2 Byte.
UTF-16 ist bei Zeichen zwischen U+800 bis U+FFFF effektiver, dafür braucht es bei den viel häufiger benützten ASCII-Zeichen doppelt so viel Speicherplatz. Dies ist der Grund weshalb UTF-16 weniger verbreitet als UTF-8 ist. Es wird jedoch unter anderem intern von Windows, Mac OS X und Java verwendet.
Da manche Hadware es vorzieht wenn das größere Byte vor dem kleinerem steht, wurden die beiden Varianten UTF-16BE (big-endian) und UTF-16LE (little-endian) eingeführt. Um die Kompatibilität zu bewahren wurde eingeführt, dass bei jedem UTF-16 Text ein U+FFFE an den Anfang geschrieben wird, kommt dieses als U+FEFF an so weiß ein Programm, dass es sich um little-endian handelt.

UTF-32 und UCS-4

UTF-32 ist so gut wie identisch mit UCS-4. Beide speichern alle Zeichen auf 4 Byte Ebene, alle Zeichen belegen also gleich viel Speicherplatz. Ihre Verbreitung ist sehr gering.

UCS-2

UCS-2 speichert alle Zeichen mit 2 Byte, es können also nur Zeichen des BMP's angezeigt werden. Seine Verbreitung ist sehr gering.

Weitere

Es gibt insgesamt 13 Unicode-Encodings:
UCS-2, UCS-2BE, UCS-2LE, UCS-4, UCS-4LE, UCS-4BE, UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE, UTF-32LE
Von denen jedoch nur die oben erwähnten eine ernsthafte Bedeutung haben.


Websites

Die erste HTML-Version kannte, ob wohl ISO-8859 schon längst verbreitet war, keinerlei Nicht-ASCII Sonderzeichen, mit HTML+ wurden 1993 die HTML-Entities eingeführt. Ein Entitie beginnt mit '&' und endet mit ';', dazwischen ist ein Kürzel, das das Zeichen beschreibt. So wird ein ä durch ä (uml steht für Umlaut) und ein ß durch ß dargestellt. Alternativ lässt sich nach dem & auch ein # gefolgt von der Dezimalen oder Hexadezimalen Unicode Nummer darstellen (also ä oder ä). Von ersterer Variante gibt es 252 Stück, mit letzterer lassen sich theoretisch alle Unicode Zeichen darstellen.
Unter gewissen Voraussetzungen kann man heute jedoch auch direkt Sonderzeichen benützen. Sie müssen dem Browser mitteilen welches Encoding sie verwenden und natürlich auch ein Encoding verwenden das alle gewünschten Sonderzeichen unterstützt.
Die logischste und profesionellste Möglichkeit ist, das Encoding im HTTP-Header zu nennen. Der HTTP-Header liefert dem Browser viele Informationen über die Seite, unter anderem gibt es auch eine Angabe 'Content-Type', dem sich das Encoding mit geben lässt:

Content-Type: text/html; charset=utf-8

Es lässt sich bei den meisten Servern auch ein Encoding für eine bestimmte Gruppe von Seiten festlegen. Den HTTP-Header kann nur der Administrator fest legen, was in den meisten Fällen nicht oder nur schwer umzusetzen ist, da nur die wenigsten einen eigenen Web-Server haben, die meisten haben nur Webspace gemietet.
Daher gibt es eine zweite einfachere Möglichkeit: man kann das Encoding in einer Datei selbst angeben. Dies scheint zwar nicht logisch, da wir dem Browser in einer "Sprache" mitteilen in welcher "Sprache" wir gerade sprechen, es funktioniert aber recht gut, da die meisten Encodings zu ASCII kompatibel sind.
Unter HTML können sie ein Encoding zum einstellen, indem sie zwischen <HEAD> und </HEAD> folgendes schreiben:

<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">

XHTML bietet zusätzlich die Möglichkeit am Anfang des Dokuments in der XLM-Deklaration etwas wie Folgendes anzugeben:

<?xml version="1.0" encoding="utf-8"?>

Sie sollten beachten, das die im HTTP-Header alle Einstellungen bezüglich des Encodings in einer HTML-Datei überschreibt. Ob im HTTP-Header ein Encoding festgelegt ist erfahren sie durch einen der Dienste am Ende der Seite.
Ist das Encoding, das sie benützen, an einer der genannten Stellen angegeben, so können sie alle Sonderzeichen außer &, < und > direkt in der Datei benützen.


Dateinamen

Auch Dateinamen haben ein Encoding, das vom Betriebssystem abhängt. Werden Dateinamen nicht oder falsch angezeigt, so hat der Dateinamen eine andere Codierung, als das Betriebssystem und im Dateinamen kommen Sonderzeichen vor.
Sie können mit dem Programm convmv einen Dateinamen von einem Encoding in ein andres verwandeln:

convmv -f altes_encoding -t neues_encoding --notes Datei_oder_Verzeichnis

Die Zeichen \ < > ? " : | / * und das Nullzeichen sollten auf keinen Fall verwendet werden, da Windows beziehungsweise Unix nicht damit zurecht kommt. Auch andere Sonderzeichen, und vor allem das Leerzeichen, können zu massiven Problemen führen und sollten daher unbedingt gemieden werden.
Drastischer ist das Ganze wenn sie eine Seite ins Internet auf ihren Web-Server laden wollen, hierbei sind folgende Zeichen streng verboten: / ? @ & ; = # " und das Leerzeichen. Die Zeichen { } [ ] ( ) < > + * $ , ! ' ` | und \ gefährden die Erreichbarkeit ihrer Seite und sollten auf keinen Fall benütze werden.
Die sicherste Möglichkeit ist in Dateinamen nur folgende Zeichen zu verwenden:


Wie finde ich heraus welches Encoding eine Datei hat?

Dafür gibt es unter Linux den Befehl 'file':

[michi@localhost ~]$ file UTF8Datei.txt
UTF8Datei.txt: UTF-8 Unicode text
[michi@localhost ~]$ file ISO8859-15Datei.txt
ISO8859-15Datei.txt: ISO-8859 text

Alternativ können sie auch das Programm utrac benützen:

[michi@localhost ~]$ utrac -p ISO8859-15Datei.txt
ISO-8859-1

Alternativ biete ich hier ein Script an, welches einfach, per Mausklick, graphisch das Encoding von Dateien anzeigt.


Wie konvertiere ich eine Datei aus dem Encoding x in das Encoding y?

Dafür können sie unter Linux die Programme iconv und utrac benützen:

iconv -f altes_encoding -t neues_encoding Quelldatei > Zieldatei

utrac [-f altes_encoding] -t neues_encoding Quelldatei > Zieldatei

Ersetzen sie: altes_encoding durch das Encoding in dem die Datei vorliegt. neues_encoding durch das Encoding in das sie die Datei konvertieren wollen. Quelldatei durch den Namen der zu konvertierende Datei. Zieldatei durch den Dateinamen mit dem die neu erstellte Datei gespeichert werden soll. Wobei bei utrac die Angabe des Encodings in der die Datei vorliegt, optional ist, da es diese wie find ermittelt. Iconv unterstützt zahlreiche Encodings, eine Liste aller unterstützten Encodings liefert:

iconv -l

Achtung: Sie sollten beachten, dass die Konvertierung in ein anderes Encoding den Text verstümmeln kann.
Achtung: Geben sie für die Quelle und die Zieldatei niemals die selbe Datei ein, dadurch werden die darin enthaltenen Informationen gelöscht!

Alternativ biete ich hier ein Script an, welches einfach, per Mausklick, graphisch Dateien in ein gewünschtes Encoding konvertiert.
Wenn sie nicht Linux/Unix benützen, oder utrac und iconv nicht installiert haben, biete ich hier ein kleines Java Programm, allerdings unterstützt dies bei weitem nicht so viele Encodings und auch keine automatische Encoding Erkennung.


Welchen Editor soll ich benützen?

Viele der Editoren können mit ACII, ISO-8859 und UTF-8 umgehen. Leider aber nicht alle. ACII wird von praktisch jedem Editor unterstützt. Folgende bekannten Editoren unterstützten UTF-8 nicht und sollten deshalb nicht benützt werden:
NEdit, Pico, nvi, BDV Notepad, Boxer, Crimson Editor, ConTEXT, Alpha, TextPad (unvollständige Unterstützung).
UTF-16 wird von einigen weiteren Editoren nicht unterstützt. Eine Liste mit der Unterstützung von UTF-8 und UTF-16 gibt es auf der Englischen Wikipedia.


Schriftarten

Natürlich hängt es nicht nur vom Encoding und vom Programm ab, ob ein Sonderzeichen korrekt angezeigt wird, sondern man braucht auch eine Schriftart die das entsprechende Zeichen darstellen kann. Die meisten Browser benützen, wenn sie ein Schriftzeichen nicht mit der eingestellten Schriftart darstellen können für dieses Zeichen automatisch eine andere Schrift. Jedoch muss minderstens eine Schrift installiert sein, die dieses Zeichen, enthält. Leider ist die Anzahl der Zeichen die eine Schrift in den gängigen Schriftdateien PostScript-CFF, TrueType und OpenType speichern kann begrenzt, sie beträgt 65.536 Zeichen.
Da Unicode inzwischen deutlich mehr Zeichen umfasst, versteht es sich von alleine, dass es keine Schriften gibt, die alle Unicodezeichen darstellen können. Unicode/ISO-Konformität heißt lediglich, dass die enthaltene Zeichenauswahl normgerecht kodiert ist.

Die derzeit vermutlich umfangreichste Schrift – in drei Dateien aufgeteilt – ist Code 2000 - 2002 von James Kass. Eine Übersicht über viele kostenlose und kommerzielle, umfangreiche und spezialisierte Unicode-Schriften bietet zum Beispiel Allan Wood.
Oft sind die Schriften in meheren Formaten verfügbar. Das Format BDF (Bitmap Distribution Format) sollten sie im normal Fall nicht verwenden, da es sich um Pixelformat handelt, die Formate PostScript und AFM (Adobe Font Metric) sollten immer zusammen verwendet sind und eignen sich besonders zu Druck oder PDF-Export, während TTF besser für die Ansicht am Bildschirm geeignet ist.
Um Schriftarten zu installieren kopieren sie sie unter Windows in das Verzeichnis C:\WINDOWS\Fonts\. Unter Linux/Unix kopieren sie sie nach /usr/share/fonts oder ~/.fonts, alternativ gibt es für Fedora Core hier eine Grafisch Anleitung.


Eingabe-Möglichkeiten

Wenn man Unicode verwendet, stellt sich bald die Frage wie man all die Sonderzeichen, die nicht auf der Tastatur sind, in einen Text bringt. Dafür gibt es verschiedene Lösungen für die unterschiedlichen Betriebssysteme.

Linux

Folgendes wurde mit der Linux-Distribution Fedora getestet, sollte jedoch auch (zumindest in ähnlicher Form) für die anderen Distributionen gelten.

Dead keys/No Dead keys

Zeichen wie ´`^~ kommen oft als einzelne Zeichen vor, können aber auch mit anderen Buchstaben kombiniert auftauchen z.B. als éíÀûũ.
Um einzustellen ob der Computer das einzelne Zeichen bei Tippen der Taste schreiben soll, oder ob er warten soll ob noch ein kombinierbarer Buchstabe folgt gibt es unter Linux die Einstellung Dead keys bzw. No Dead keys. Unter FC5 stellen sie diese Funktion ein indem sie unter "System -> Einstellungen -> Tastatur -> Belegung" eine andere Tastaturbelegung einstellen, für Dead keys nehmen sie "Romanian keybord with German letters" für No Dead keys "Romanian keybord with German letters eliminate dead keys".

Der Compose-Key

Der Compose-Key ist eine sehr praktische Funktion unter Linux. Der Compose-Key verschmilzt zwei Zeichen mit einander. So werden z.B. aus , und c das Französische ç aus ~ und u wird ũ.
Den Compose-Key kann man unter FC5 unter "System -> Einstellungen -> Tastatur -> Belegungseinstellungen -> Compose Key Position" einstellen. Danach kann man einfach den Compose-Key drücken, das erste Zeichen tippen, das zweite Zeichen tippen, den Compose-Key loslassen, und schon hat man das gewünschte Zeichen.

Unicode-Nummer

Unter Gnome kann man durch Drücken von 'Str' + 'Umschalt' + <hexadezimale Nummer>, jedes beliebige Unicode Zeichen mit seiner Unicode Nummer einfügen. Bei Gnome ab Version 2.16 muss man vor der Nummer noch ein 'u' drücken. Unter der Linx-Konsole (aber nicht in den grafischen Terminals) können sie Zeichen durch Drücken von 'Alt' + <dezimale Nummer auf dem Nummernblock> hinzufügen.
Für diese Eingabemethode muss man natürlich die Nummer des gewünschten Zeichens wissen.

Sollten diese Kombination nicht funktionieren (zum Beispiel auf KDE oder XFCE), so können Sie die equivalente Möglichkeit von Scim verwenden. Satt dessen gehen sie wie folgt vor: Aktivieren sie Scim mit 'Strg' + 'Leertaste' und wählen sie aus der Liste "Unicode Rohdaten" aus. Danach können sie mit den Tasten A bis F und den Nummern über den Buchstaben-Tasten (also nicht am Nummernblock) den Hexadezimal Wert des gewünschten Zeichens eingeben. Der Vorteil daran ist, dass sie zu einem bereits eingegebenen Code-Anfang eine Liste mit Vorschlägen für mögliche Fortsetzungen inklusive einer Vorschau der entsprechenden Zeichen, zu sehen bekommen.

Grafisch

Viele Programme, bei denen man mit Text zu tun hat, bieten eine Funktion wie 'Sonderzeichen einfügen', mit der man eine bequem zu bedienende Tabelle aller Zeichen bekommt.
Bietet ein Programm diese Funktion nicht, so kann man das Programm Gucharmap, oft auch Zeichentabelle genannt, benützen, das bei den meisten Distributionen bereits vorinstalliert ist. Sie erhalten es auch bei dem unten genanntem Link

Wie passe ich das Tastaurlayout an?

Mit jeder Taste lassen sich 4 Zeichen darstellen, die Taste alleine, die Taste mit Shift, mit AltGr und mit Shift und AltGr. Also wäre es interessant alle diese Tastenbelegungen einzeln verändern zu können, um so Beispielsweise leicht Griechische oder Russische Buchstaben zu schreiben können. Die Dateien die man dafür verändern muss findet man je nach Distribution in /etc/X11/xkb/symbols, in /etc/X11/xkb/symbols/pc oder in /usr/share/X11/xkb/symbols. Vorausgesetzt sie verwenden ein deutsches Tastatur Layout, gehen sie wie folgt vor:
Achtung: Bevor sie Dateien verändern machen sie unbedingt Backups von diesen in einen anderen Ordner (In ihrem home-Verzeichnis)!
Die Dateien die sie interessieren sind "latin" und "de", öffnen sie beide. Die Dateien sind in Blöcke eingeteilt in denen die Tasten definiert sind. Alle Tasten die in einem Block definiert sind können mit "include" in einen anderen Block eingefügt werden, einzelne von ihnen können dann wieder überschrieben werden. Deshalb müssen wir an meheren Stellen arbeiten.
Die einfachste Vorgehensweise ist, sie schauen zuerst welches Tastaturlayout sie verwenden. Danach suchen sie in der Datei "de" nach dem Block in dem dem mit "name[...]=" dieser Name festgelegt ist. In diesem und in allen Blöcken die mit "include" in ihm eingebunden sind (und allen die in diesen eingebunden sind...), können sie nun Veränderungen vornehmen.
Die Tasten sind nach folgendem Muster definiert:

key <Tasten-Nummer> { [ Zeichenname, Zeichenname, Zeichenname, Zeichenname ] };

Die Zeichen sind in der Reihenfolge wie oben beschrieben. Sie können nun diese beliebig verändern.
Achtung: Seien sie vorsichtig, verwenden sie am besten nur copy and past, versuchen sie nicht die Namen von Zeichen zu erraten, suchen sie nach den Zeichennamen in den Dateien. Um beispielsweise Griechische Buchstaben einzufügen, schauen sie in die Datei gr. Nach dem speichern der Dateien, sollten sie um Fehler zu vermeiden alle *~ Dateien (Backups die die meisten Editoren anlegen) im Ordner löschen:

rm *~

Nach dem nächsten Neustart sind die Änderungen aktiv.
Mir ist es trotz inteniver Bemühungen noch nicht gelungen eine einfache Möglichkeit zu finden eigene Tastaturlayouts zu deffinieren. Ich werde weiter suchen, und sie hier informieren sobald ich eine Möglichkeit gefunden habe.

Fehlerbehebung

Sollten sie einen falschen Zeichennamen einfügen, so erscheint beim nächsten Neustart eine Fehlermeldung und alle Sonderzeichen auf der Tastatur werden ignoriert. Um dies rückgängig zu machen, müssen sie entweder die Backups wieder einspielen oder die Fehlerhaften Zeichen ausfindig machen und ändern. Sollten sie kein Backup gemacht haben, so können sie die Dateien von einem anderen PC oder dem rpm "xorg-x11-xkbdata" entnehmen.
Sollte nach Neustart folgende Fehlermeldung erscheinen:

Beim Starten des GNOME-Einstellungsdämons ist ein Fehler aufgetreten.
Möglicherweise funktionieren einige Dinge, wie z.B. Themen, Klänge oder Hintergrundeinstellungen nicht korrekt.
Der Einstellungsdämon wurde zu oft neu gestartet.
Die letzte Fehlermeldung war:
System exception: IDL:Bonobo/GeneralError:1.0 : Kindprozess gab keine Fehlermeldung aus. Ein unbekannter Störfall trat auf
Beim nächsten Anmelden wird GNOME weiterhin versuchen, den Einstellungsdämon neu zu starten.

So gehen sie wie folgt vor:
Stellen sie im Grafischen Menü das Tastatur-Layout auf eine beliebiges neues Layout um, starten sie ihren PC neu, stellen sie ihn wieder auf das gewünschte Layout und starten sie nochmals neu. Danach sollte alles wieder in Ordnung sein.

Scim

Doch wie kann man mit einer gewöhnlichen deutschen Tastatur Chinesisch, Japanisch oder Koreanisch schreiben? Dafür braucht man scim, scim wandelt, die richtigen Pakete vorausgesetzt, Umschriften wie Pinyin, Chewing, Anthy, Hangul und co in die entsprechenden Zeichen um.
Bei Fedora Core 6 ist Scim mitsamt der meisten Sprachpakete bereits standardmäßig installiert. Wenn sie eine andere Distribution oder ein älteres Fedora benützen, müssen sie um Scim zu benützen, zuerst es und alle gebrauchten Sprachpakete installieren. Eine erklärende Liste der Sprachpackete finden sie hier, downloaden können sie viele davon hier.
Wenn sie yum benützen und eine vollständige Sprachunterstützung wollen (und ihnen ein paar MB Festplattenspeicher nichts ausmachen), so können sie mit folgendem die meisten Pakete (bei mir 75 Stück) installieren:

# yum install scim anthy libchewing scim* m17n*

Anschließend müssen sie scim konfigurieren und in den Autostart eintragen, das geht je nach Distribution und verwendetem Fenstermanager anders. Unter Fedora 8 können sie das mit dem Programm "im-chooser" unter ältereren Fedora-Versionen geht es mit:

yum install system-switch-im
im-switch -s scim

Sollte das nicht funktionieren versuchen sie es mit:

mkdir -p ~/.xinput.d
ln -s /etc/X11/xinit/xinput.d/scim ~/.xinput.d/Standard

Wobei sie "Standard" durch die Sprache, die scim als Standard benützen soll, in der Form: xx_YY, wobei xx die Anfangsbuchstaben der Sprache und YY die des Landes sind. (Bsp: jp_JP)
(Englische) Anleitungen für weitere Distributionen finden sie hier
Sobald sie scim installiert und konfiguriert und den Computer neu gestartet haben, können sie scim mit Str+Leertaste zu jedem Zeitpunkt aktivieren, eine kleine Box erscheint, in der sie die gewünschte Sprache einstellen können. Dann können sie direkt mit der ausgewählten Umschrift wohin sie auch wollen schreiben, die Umgewandelten Zeichen erscheinen in einer kleinen grauen Box, sobald sie ein Leerzeichen tippen, wird der Text in die aktuelle Zeichenfläche eingefügt. Mit Str+Leertaste deaktivieren sie scim wieder, eingetippter Text erschient wieder normal.
Ein Beispiel: Wenn sie chewing installiert und ausgewählt haben, erhalten sie, nach der Aktivierung durch Str+Leertaste, durch eintippen von 'Taiwan' den Namen der schönen Insel in vereinfachten Chinesisch: 台湾; durch drücken der Leertaste fügen sie den Text dem aktiven Textfeld hinzu, wen sie wieder lateinische Buchstaben schreiben wollen drücke sie einfach wieder STR+Leertaste.

Windows

Der Nummern-Block

Bei den meisten Windows-Anwendungen kann man durch Drücken von 'Alt' + 'x' + Nummer (unter MS Word 2003 jedoch 'Alt' + 'c' + Nummer) auf dem Nummernblock, jedes beliebige Unicode Zeichen mit seiner Unicode-Nummer einfügen. Vorausstezung ist jedoch, dass sie die Unicode-Nummer des gewünschten Zeichens wissen.

Grafisch

Windows bringt die Zeichentabelle (charmap.exe) mit, damit können sie bequem Zeichen einfügen. Mit dem OpenSource Programm Quick Key können sie auch häufig benötigte Zeichen schnell und einfach eingeben.

Wie passe ich das Tastaurlayout an?

Mit Tools, die sich "Keyboard Layout Manager" nennen können Sie das Layout ihrer Tastatur bearbeiten.

Scim, Global IME

Eine Windowsversion von Scim ist zwar nach Angabe der Scim-Entwikler geplant, diese wird jedoch voraussichtlich nicht in nächster Zeit erscheinen. Microsoft bietet jedoch ein ähnliches Programm namens Global IME an, welches jedoch deutlich eingeschränkter ist.


Java

Intern

Java verwendet intern für Strings und Chars UTF-16. Dadurch folgt auch das man im Gegensatz zu C++ im Quellcode folgendes schreiben kann:

System.out.println("Deutsche Umlaute äöü; Französische: éáç; Unicode-Sonderzeichen: չ𐌄𐎬شㆱᨖწ⺝ಭໝᛤ");

Javac

Der Java Compiler Javac geht davon aus, dass die ihm übergebenden Quelltexte in dem Encoding sind, welches das Betriebssystem als Standard verwendet. Um javac in einem anderem Encoding gespeicherte Dateien zu übergeben benützt man folgende Syntax:

javac -encoding Encoding_Name Quelltext_Dateien

Datei Streams

Java hat etliche Klassen um in Dateien zu schreiben und aus Dateien zu lesen:

FileReader eingabe = new FileReader(einausgabedatei);
FileWriter ausgabe = new FileWriter(einausgabedatei);

Liest bzw. schreibt zum Beispiel mit dem Standard-Encoding des Betriebssystems auf dem das Programm läuft.

InputStreamReader isr = new InputStreamReader(InputStream in, String Encoding);
OutputStreamWriter( OutputStream out, String enc );

Hingegen liest bzw. schreibt zum Beispiel mit dem als String übergebenem Encoding. Mehr Informationen zu Streams bekommen sie im Kapitel 15 des Buches "Java ist auch eine Insel"


Domains

In Domain-Namen sind nur lateinische Buchstaben (ohne Unterscheidung zwischen groß und klein Schreibung), Ziffern und das Minus-Zeichen erlaubt. 1991 wurden die Internationalisierten Domains (IDN) eingeführt die mit Hilfe einer Technik namens Punycode die Verwendung sämtlicher Unicode-Zeichen ermöglicht.
Welche Sonderzeichen erlaubt sind entscheiden die einzelnen Vergabestellen für Domains selbst. So sind für .de/.com/.net-Adressen 92, für.at 34 und für .ch und .li 31 zusätzliche Zeichen in Domains erlaubt, für .org und .info sind lediglich äöü erlaubt.

Punycode

Eine IDN wird gekennzeichnet dadurch, dass ein xn-- am Anfang der ASCII-kodierten Domain steht. Danach folgt die Domain, wobei die Sonderzeichen ausgelassen werden und die durch ein - abgetrennten kodierten Sonderzeichen. Eine Ausnahme spielt hierbei das ß das mit dem ss gleichgesetzt wurde. Am Schluss folgt wie immer das .de oder Co
Beispiele:

schönitzer.de -> xn--schnitzer-27a.de
www.kühe-mögen-äpfel.de -> www.xn--khe-mgen-pfel-jfb9x9c.de
français.de -> xn--franais-xxa.de
meine-straße.de -> meine-strasse.de

Wie eine IDN in Punycode-Schreibweise aussieht, erfahren sie bei unten oder durch:

whois -h whois.denic.de -- -C Encoding_ihres_Systems Umlautdomain.de


Ägyptisch

Die ägyptischen Hiroglyphen wurden bis heute noch nicht in Unicode aufgenommen. Dies liegt daran, dass im ägyptischen Hiroglyphen oft übereinander, verschachtelt oder sogar gedreht geschrieben werden, um ein besseres Schriftbild zu ergeben. Eine Aufnahme ist jedoch für die Zukunft geplant. Als Alternative verwendet man ein Verfahren namens Manuel-de-Codage-Format, kurz MdC. Die einzelnen Hieroglyphen werden dabei entweder anhand der Nummern der Gardiner-Liste oder ihrer Lautwerte kodiert und auf diese Weiße in eine ASCII-Datei gespeichert. Die Position der Zeichen wird dabei mitels Sonderzeichen festgelegt: Durch das Minus-Zeichen werden zwei Zeichen hintereinander angerdnet; mit dem Doppelpunkt ordnet man zwei Zeichen übereinander an; und mit dem Mal-Zeichen kann man zeichen zusammenfassen, um sie beispielsweise beide über ein anderes Zeichen zu schreiben. Mit weiteren Befehlen lassen sich Zeichen einfärben($r), rotieren (\R90), hinterlegen (// oder #), skalieren (\80) und vieles mehr. Auch lateinische Buchstaben lassen sich im MdC problemlos darstellen. (Sinnloses) Beispiel:

p*t:pt-O-A#1234-..-A-$r-F14-$b-A2\R180
ergibt:
Beispieltext ohne Bedeutung

Um MdC zu schreiben und anzuzeigen, benötigen Sie extra Programme. Ein paar frei verfügbare sind die folgenden:

Um ägyptische Transkriptionen darstellen zu können, benötigt man zusätzliche Schriften, da Unicode einige der Transcriptionszeichen nicht unterstüzt. Der verbreteste Font hierbei ist Trlit_CG Times. Eine weitere Schrift, welche jedoch nicht MdC-Konform ist, ist Umschrift_TTn.




Anhang: Links

Den Inhalt des HTTP-Header erfahren sie:

Unicode

Punycode


Creative Commons License Dieser Text von Michael F. Schönitzer steht unter einer Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz. Über diese Lizenz hinausgehende Erlaubnisse können angefragt werden.

Sie haben Fragen, Kritik oder Verbesserungsvorschläge zu dieser Homepage? Oder unsere Seite hat ihnen geholfen? Bitte teilen sie es uns mit!