UNICODE

International eindeutiger Zeichencode

Unicode (ISO 10646) ist der geltende weltweite Standard für die Codierung von Zeichen. Ein einzelnes Zeichen wird als 'code point' benannt. Die Angabe einer Unicode-Zahl characterisiert eindeutig eines von derzeit bereits über 100000 möglichen Zeichen.
Zeichencodes PC-Codes für Buchstaben, Ziffern und Sonderzeichen
Unicode-Bereiche Liste und Details zu den >100000 Unicode-Zeichen
Probleme Missverständnisse und Probleme
Unicode Allgemeine Angaben zum Standard
Text Verwendung von Unicode in Text-Editoren und Textverarbeitung
Datenbank Verwendung von Unicode in Datenbanken
HTML Unicode-Zeichen auf Webseiten
Detail-Bereiche Details zu den Bereichen Griechisch (αβγ), Symbole (← ∞ ◄ ● ↕ ≠ ♣ ..)
UTF Codierung von Unicode-Zeichen in der IT-Praxis
Programmierung Verwendung von Unicode in Programmiersprachen
Links Ausgewählte Unicode-Links Links zum Thema 'Unicode'

UNICODE Bereiche

Unicode ist der weltweite Standard zur Codierung von Schriftzeichen. Jeder Bereich hat einen systematischen Namen U* und einen festgelegten Adress-Bereich variabler Länge. Die Bereiche grenzen meist lückenlos aneinander, innerhalb der Bereiche sind jedoch nicht alle Zeichen definiert.
Alle Angaben ohne Gewähr !
Klicken sie den grünen Punkt (Unicode U+25CF ) einer Zeile, um eine Tabelle der jeweiligen Zeichen zu erhalten.
Diese Ansicht wird von ihrem Browser mit Hilfe eines integrierten Javascript-Programms hergestellt. Damit können sie die Funktion ihres Betriebssystem verschiedener Browser Live ausprobieren.
Mit Klick auf sie das kleine Icon ganz rechts wird das Original-pdf-Dokument des betreffenden Bereichs geladen. Dort sind alle Details zu den einzelnen Zeichen, sowie ein Muster seiner Ansicht enthalten.

Missverständnisse und Probleme

Unicode ist nicht vergleichbar

Unicode ist mit anderen verwendeten Zeichensätzen nur bedingt vergleichbar. Es gibt einige wichtige Unterschiede:

Umschalten entfällt:
Man kann im Text alle Unicode-Zeichen mischen, z.B.
abcαβωжЪäöüß...
Damit entfallen die aufwändigen Maßnahmen, die sonst notwendig sind, um zwischen verschiedenen nationalen Zeichensätzen umzuschalten.

Sonder-Schriften entfallen.
Jede Schrift-Familie (font) sollte alle Unicode-Zeichen enthalten. Damit werden Schriften wie z.B. Symbol obsolet, die normale lateinische Zeichen als griechische Zeichen 'verkleidet', ebenso alle Schriften, die lateinische Zeichen als Icons oder Symbole darstellen, wie z.B. Dingbats.

Transportform
Man kann Unicode nicht als Zeichensatz angeben, wie z.B. → ASCII oder → ISO-8859-1 (Latin-1). Es gibt mehrere unterschiedliche Transportformen (↓ UTF), die man an dieser Stelle angeben kann.

Anwendung nur mit UTF

Im Gegensatz zu den meisten anderen Zeichen-Codes kann man Unicode nicht 'direkt' anwenden, z.B. bei der Herstellung von Texten oder Webseiten.
Man muss eine der → Unicode Transport-Formen (UTF) angeben.
Die für Unicode meist-verwendeten Codes sind → UTF-8 und UTF-16.
MS-Software drückt sich leider oft unklar aus. Was im 'Unicode'-Format gespeichert wird, ist in Wirklichkeit meist entweder UTF-8 oder UTF-16 codiert. AnwenderInnen von MS-Programmen dürfen raten oder probieren, was wirklich verwendet wurde.

Beispiel (Beginn einer → XHTML-Datei):
<?xml version="1.0" encoding="utf-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
...

Alle Mitglieder der XML-Familie (z.B. → XHTML, → SVG, ...) verwenden normalerweise UTF-8.
Fast alle Seiten dieses Webs sind in XHTML erstellt und folgerichtig mit UTF-8 codiert.

Wieviele Unicode-Zeichen ?

Offiziell ist Unicode derzeit mit 21 Bit definiert, das ergibt 221 = 2097152 ~ 2 Mio mögliche Zeichen. Viele davon sind bereits festgelegt, es gibt jedoch noch freie Bereiche.

Computer arbeiten nur mit ganzen Bytes, außerdem wird der Bedarf an Zeichen bald diese Grenze überschreiten. Ohne irgendwelche zusätzliche Maßnahmen könnte man daher 3 Byte = 24 Bit ~ 17 Mio Zeichen definieren.

Heutige PC arbeiten jedoch nicht mit 3 Byte sondern mit Wort-Breiten von 4 oder 8 Byte.
4 Byte = 32 Bit ~ 4 Milliarden Zeichen. Diese Erweiterung ist technisch kein Problem, da alle Unicode Transport Formen (UTF) dazu geeignet sind.
Man kann damit rechnen, dass Unicode im Laufe der Zeit auf vernünftige 32 Bit erweitert wird.

Die offizielle Definition der Zeichen hinkt weit hinter den technischen Möglichkeiten zurück. Von den derzeit theoretisch möglichen 2 Mio Zeichen sind erst ca. 120000 definiert. Weitere 120000 Zeichen sind großzügig als 'Private Use Area' freigehalten.

Alle gängigen Betriebssysteme unterstützen mindestens 2 Byte = 16 Bit = 65536 Unicode Zeichen. Das führt häufig zum Missverständnis, dass es nur so wenige Unicode-Zeichen gibt. Es gibt schon heute 32mal so viele Unicode Zeichen.

Die derzeit verwendeten Schrift-Familien (fonts) enthalten im besten Fall einen großen Teil der ersten 65000 Unicode Zeichen.
Man erkennt Unicode Zeichensätze leicht an der Datei-Größe.
Typische TrueType- oder OpenType-Schriften *.ttf für 128 oder 256 Zeichen sind ca. 50kB groß. Unicode TrueType-Schriften brauchen >20MB und umfassen selbst damit nur 'die meisten' der ersten 65000 Unicode Zeichen.

Vorsicht bei Verwendung von Unicode-Zeichen U>FFFF:
Je nach verwendeter Software werden manchmal alle Bits>16 abgeschnitten. In diesem Fall wird z.B. ein Zeichen U+10001 als Zeichen U+0001 dargestellt.

Platzbedarf

Unicode-Zeichen werden nur in einer der → Unicode Transportformen (UTF) angewendet. Der Platzbedarf ist je nach dem verwendeten UTF-Code unterschiedlich und darüber hinaus variabel !

Missverständnis: Der Platzbedarf beträgt nicht generell 2 Byte / Zeichen. Er liegt bei durchschnittlichen mitteleuropäischen Texten nur wenig über 1 Byte. Lediglich die nationalen Sonderzeichen (äöüÄÖÜß) brauchen 2 Byte.

Beim meist-verwendeten Code → UTF-8 ist der Platzbedarf variabelund richtet sich nach der Häufigkeit der Zeichen:
Die ersten 128 Zeichen ( → ASCII-Zeichen) werden weltweit besonders oft verwendet und mit nur 1 Byte codiert.
Weitere 1920 Zeichen werden mit 2 Byte codiert. Darunter fallen alle bedeutenden Sprachen in Europa, Australien, Nord- und Südamerika und in Russland, inkl. Griechisch, Kyrillisch, Arabisch und Hebräisch.
Weitere 63488 Zeichen (vorwiegend aus Asien und Indien) werden mit 3 Byte codiert.
Weitere 2 Mio Zeichen könnten mit 4 Byte codiert werden, weitere 65 Mio Zeichen mit 5 Byte.
Details zu UTF-8
Microsoft-Problem
Der Bereich U+0080..U+009F kann problematisch sein:
Unicode und → ISO-8859 definieren in diesem Bereich 16 'nicht druckbare' Kontrollzeichen, → CP-125* (MS-Software) verwendet die gleichen Codes für Zeichen aus allen möglichen Unicode-Bereichen, insbesondere für. Das führt zu zahlreichen unangenehmen Problemen.

Das €-Zeichen (Unicode U+20AC) wird von MS-Software gerne mit Code U+0080 codiert. Das sollte man unbedingt unterbinden.
Tipp: Jedes Programm (auch von Microsoft) verarbeitet den Unicode U+20AC korrekt zum-Zeichen - Man braucht den gefährlich falschen Code U+0080 gar nicht zu verwenden.
In vielen Fällen treten Bytes 0x80...0x9F als 'Folge-Bytes' in → UTF-8 Code auf: Im Windows-Zeichensatz werden sie 'falsch' angezeigt, als Unicode-(Kontroll)-Zeichen gar nicht.
Details zu den Zeichen dieses (bei MS-Software) gefährlichen Code-Bereichs auf der → ASCII-ANSI-Seite.

UNICODE

UNICODE Das Unicode Consortium publizierte 1991 die erste Version des Unicode-Standards zur Codierung von Zeichen. Das Konsortium arbeitet mit der ISO (International Standards Organisation) zusammen. ISO Unicode und ISO-10646 stimmen weitgehend überein. Allerdings enthält Unicode mehr Praxis-orientierte Angaben (z.B. Sortierung für Datenbanken, Schrift-Richtung, ...).

Umfang:

Ursprünglich wurde Unicode mit einem Umfang von 16 Bit (2 Byte) für ca. 65000 Schriftzeichen geplant. Es stellte sich jedoch bald als unmöglich heraus, den Anspruch (alle weltweit verwendeten Zeichen codieren) damit zu erfüllen.
Heute ist Unicode mit 21 Bit definiert, der Code reicht bis U+10FFFD (dezimal 1114109.).
Allerdings wird auch diese willkürlich gesetzte Grenze - so wie alle anderen ähnlichen Grenzen in der IT - nach einigen Jahren überschritten werden - Bei 32 oder 64 Bit Wortbreite heutiger PC kein Problem.

Weil manche große Software-Unternehmen (derzeit) nur den 16-Bit Bereich U+0000..U+FFFF (65536. Zeichen) nutzen können, ist der Irrglaube weit verbreitet, dass dies der gesamte Unicode-Bereich ist.
Allerdings befinden sich die meisten (derzeit) praktisch genutzten Zeichen im 16-Bit-Bereich. In den einzelnen Bereichen sind nicht alle Zeichen festgelegt, meist ist Platz für weitere Zeichen reserviert.

Mit den Hilfsprogrammen im Kapitel ↑ Unicode-Bereiche (oben) können sie Live testen, welche Zeichen ihr Betriebssystem + Browser erkennt.

Definition:

Unicode beschränkt sich nur auf die Codierung: Für jedes Zeichen wird eine Code-Nummer und ein Zeichen-Name vergeben.
Die Form des Zeichens wird nicht festgelegt, das fällt in die Verantwortung der Schrift-Familie. Allerdings wird eine Muster-Form angegeben, damit das Zeichen richtig identifiziert werden kann.

Beispiele:
UnicodeChrName
U+0041ALatin Capital Letter A
U+00F6öLatin Small Letter o with Diaresis
U+017EžLatin Small Letter z with Caron
U+03A3ΣGreek Capital Letter Sigma
U+20ACEuro Sign
U+221EInfinity
Die Zeichen der Spalte 'Chr' sind - wie überall in diesem Web keine Bilder, sondern Textzeichen, die sich kopieren und in andere Dokumente einsetzen lassen !

Schriften:

Zur Anzeige von Zeichen werden Schriften (fonts) benötigt. Unicode legt die genaue Form der Zeichen nicht fest !
Zur Orientierung sind zwar in den Original-Dokumenten einfache Muster enthalten, diese werden jedoch von jeder Schrift entsprechend ihrem Charakter abgewandelt.

Hersteller von Betriebssystemen und Schriften bemühen sich, ihre Schriften mit immer mehr Unicode-Zeichen auszustatten.
Zumindest die Basis-Schriften jedes Betriebssystems (serif, non-serif, monospace) umfassen derzeit bereits viele häufig verwendete Unicode-Zeichen und sind daher auch an ihrem Umfang (einige 100kB...20MB) von älteren ASCII/ANSI-Schriften (einige kB) zu unterscheiden.
Bei SourceForge kann man kostenfrei Unicode-Schriften für Linux und Windows laden.
Test: Kann ihr Browser dieses Zeichen anzeigen ?

Angaben über den Zeichen-Umfang von Schriften sind hier nicht möglich, wegen der großen Vielfalt und der raschen Weiterentwicklung der Versionen. Testen sie im Zweifel die Anzeige bestimmter Unicode-Zeichen.
Wenn sie IT-Produkte (Texte, Webseiten, ..) weitergeben, dann sollten sie dazu  ausnahmslos  Standard-Schriften verwenden, welche auf (fast) jedem PC-System gleichartig installiert sind.
Andernfalls werden - neben anderen unerwünschten Effekten - die Unicode-Zeichen evtl. nicht angezeigt.

Eine Ausnahme davon bilden nur Dokumente, in welchen die verwendete Schrift enthalten ist (z.B. Adobe pdf).

Ebenen:

Manchmal findet man die Bezeichnung 'plane' (Ebene) für Unicode-Bereiche. Meist sind damit Bereiche fixer Länge gemeint. Diese Vorstellung orientiert sich noch an → ISO-8859, wo jeder Zeichensatz die gleiche Länge hat.
Die Unicode-Bereiche sind jedoch nicht nach gleicher Länge sondern nach Zugehörigkeit zu einer Sprache oder Zeichen-Gruppe eingeteilt. Die Länge variiert zwischen 16...65000 Zeichen. Aus diesem Grund werden 'planes' hier nicht weiter erwähnt.
Unicode-Zeichen werden von allen modernen Programmen verarbeitet: Sie können die Zeichen z.B. kopieren und einsetzen wie jeden anderen Text - auch von dieser Webseite. Zur Anzeige sollten sie möglichst eine der Standard-Schriften ihres Betriebssystems verwenden. (Unicode-Schriften bei Sourceforge für Linux und Windows)

UNICODE mit Text-Verarbeitung und Text-Editoren

Text-Editoren sind Programme zur Textbearbeitung, wie sie typisch von EntwicklerInnen benutzt werden.

Tastatur

Alle gängigen Betriebssysteme erlauben die Änderung des Tastatur-Layouts. Einige gewohnte Zeichen liegen dann an anderer Stelle, einige (z.B. die deutschen Umlaute) fehlen, andere Zeichen sind zusätzlich verfügbar.

Beispiel: Taste # (deutsche Tastatur) liefert auf einer US-Tastatur den Backslash \ und auf einer slawischen Tastatur ein ž.
In Windows-Betriebssystemen ist diese Option gut versteckt: Nicht im Kontrollfeld 'Tastatur' (Keyboard), sondern in den Einstellungen für Regions- und Sprach-Optionen (Regional & Language Options) | Sprachen | Details. Hier kann man zusätzliche Tastatur-Einstellungen konfigurieren.
Aktivieren sie die Anzeige im 'System-Tray' (rechte untere Bildschirm-Ecke): Dort wird dann ein kleines Symbol   DE   angezeigt. Beim Anklicken kann man die Tastatur-Einstellung ändern.

CharMap

Windows enthält in allen gängigen Versionen das wenig bekannte Programm 'Zeichentabelle' (charmap.exe), meist im Windows-Verzeichnis. Damit lassen sich die Unicode-Zeichen U+0000..FFFF auswählen und über die Zwischenablage in alle Dokumente einsetzen. Mühsam, aber es funktioniert.
Im Internet sind einige ähnliche Programme als FreeWare verfügbar.

Tastatur-Eingabe
Am unteren Rand des Programm-Fensters von charmap wird der hexadezimale Unicode jedes gewählten Zeichens eingeblendet. Für Codes bis U+00FF wird auch der dezimale → Tastatur-Code (→ ASCII / ANSI) angegeben.
Hinweis: Veraltete Versionen von charmap.exe zeigen nur 256 Zeichen !

LibreOffice und OpenOffice

Die integrierte Hilfe kennt die Begriffe 'Sonderzeichen' und 'UTF', jedoch nicht 'Unicode'.

Eingabe: Menü Einfügen | Sonderzeichen.
In einem kleinen Fenster wird eine (unvollständige) Auswahl von Unicode-Zeichen bis U+FFFF angezeigt.
Unabhängig davon kann man Unicode-Zeichen mit Hilfe der Zwischenablage kopieren und einfügen - z.B. auch aus dieser Webseite.

Der Import von → UTF-8 Text-Dateien funktioniert problemlos.

Für den Export von Text als → UTF-8 Datei wird in neueren Versionen eine gut versteckte Option angeboten:
Menü Datei | Speichern unter, Dateityp=Text Kodiert. Button Speichern.
Ein Fenster warnt vor Verlusten. Klicken sie Ja
Ein Fenster mit dem unsinnigen Namen ASCII Filter Optionen erlaubt die Auswahl von Zeichensätzen, darunter UTF-7, UTF-8 und 'Unicode' (verwendet UTF-16).

Details zur UTF-Codierung von Unicode-Zeichen.

MS-Word

unterstützt Unicode schon recht gut, die Werkzeuge dazu sind allerdings sorgfältig versteckt:

Eingabe: Menü Einfügen | Symbol | Symbole | von | Unicode(hex).
In einem kleinen Fenster werden die Unicode-Zeichen bis U+FFFF angezeigt.

Eingabe über die Tastatur:
Tasten Hex-Code (4 Ziffern) in den Text schreiben, danach (Mausmarke rechts von den 4 Hex-Ziffern) Alt-c eingeben:
Griech. α
Euro:
03B1  Alt-c
20AC  Alt-c
Unabhängig davon kann man Unicode-Zeichen mit Hilfe der Zwischenablage kopieren und einfügen - z.B. auch aus dieser Webseite.

Der Import von → UTF-8 Text-Dateien funktioniert problemlos. Lediglich ein Dialogfenster stellt die unsinnige Frage nach der Codierung, selbst wenn diese eindeutig ist.

Für den Export von Text als → UTF-8 Datei wird in neueren Versionen eine gut versteckte Option angeboten:
Menü Datei | Speichern unter, Dateityp=NurText, Button Speichern.
Das Fenster Dateikonvertierung warnt, dass der Text nicht ohne Verluste gespeichert werden kann. Wählen sie Andere Codierung, - erst dann wird die Auswahl-Liste aktiviert, in der sie u.a. UTF-7, UTF-8 und UTF-16 (Big-Endian) wählen können.
Alternative: Text in den 'gewöhnlichen' Editor notepad.exe kopieren, der kann nämlich UTF-8 speichern (s.u.).

MS Programme erwarten UTF-Dateien mit der Endung *.txt. Allerdings werden auch andere Endungen wie *.utf verarbeitet, wenn man in den Dialogfenstern zur Datei-Auswahl die Option 'Alle Dokumente' wählt.

Details zur UTF-Codierung von Unicode-Zeichen.
kwrite (Linux)
ist der meist verwendete Text Editor auf SuSE-Linux.
Es scheint keine Möglichkeit (?) zur Eingabe von Unicode-Zeichen zu geben.
Unicode-Zeichen aus der Zwischenablage werden korrekt übernommen.
Die Codierung eines Dokuments wird im Menü Extras | Codierung eingestellt.
Zum Speichern lässt sich das Format (im Dialog-Fenster ganz rechts oben) komfortabel einstellen.
kate (Linux)
ist ebenfalls auf fast allen Linux Systemen (mit KDE Desktop) installiert.
Verhält sich wie kwrite.
Emacs (Linux):
Tasten/Befehle Alt-x insert-ucs-character, dec-Code:
Griech. α:
Alt-x  insert-ucs-character  945
Euro €:
Alt-x  insert-ucs-character  8364

Kurz-Doku Linuxfibel (de), Gnu-Franken (de)
VI Improved (Linux):
Tasten Strg+V, U, hex-Code.
Griech. α:
Strg+V  U  03B1
Euro €:
Strg+V  U  20AC

Kurz-Doku Linuxfibel (de)
Tipp: Zum Üben gibt es den VIM auch für Windows.
Notepad Editor (Windows)
Der 'primitive' Text-Editor notepad.exe ist in jedem Windows-System enthalten. Er kann Unicode-Zeichen darstellen und mit der Zwischenablage austauschen, d.h. kopieren und einfügen.
Besser (!) als bei M$Word kann er Unicode-Text in den Formaten → UTF-8 und → UTF-16 (getarnt unter den Namen 'Unicode' oder 'Big Endian Unicode') importieren und exportieren.
Word-AnwenderInnen können Text aus Word in den Editor kopieren und dort als UTF-Datei speichern.
Wordpad Editor (Windows)
Auch der etwas komfortablere Text-Editor wordpad.exe ist in jedem Windows-System enthalten. Er kann Unicode-Zeichen darstellen, sowie mit der Zwischenablage austauschen, d.h. kopieren und einfügen.
Der Import von → UTF-8 oder → UTF-16 Dateien funktioniert problemlos, für den Export wird jedoch nur → UTF-16 angeboten (getarnt unter dem Namen 'Unicode-Textdokument').

Notepad++

Ist derzeit einer der besten Text-Editoren für Windows. Bietet im Menü 'Format' übersichtliche Optionen zum Umwandeln / Speichern von Text-Dateien in UTF-8 und UTF-16 (UCS-2) mit oder ohne BOM.
UltraEdit (Windows):
Dieser professionelle Editor bietet u.a. umfangreiche Unterstützung für Unicode und UTF.
Details zur UTF-Codierung von Unicode-Zeichen.  

Unicode in Datenbanken

Theorie und Praxis der internationalen Verflechtung:

Angesichts der Globalisierung sollte es eine Selbstverständlichkeit sein, Texte wie z.B. Namen von Personen oder Orten eindeutig zu speichern, und genauso wiederzugeben, wie von den betroffenen Personen gewohnt und gewünscht.

Dieser Service entspricht einer Wertschätzung der jeweiligen Kulturen und Personen, und bietet gerade deshalb auch einen Vorteil im geschäftlichen Bereich.

Innerhalb der EU müsste man dazu ziemlich viele Zeichensätze verwenden, sogar innerhalb von Österreich mindestens 'Latin-1' für die deutschen Umlaute und 'Latin-2' für die slawischen Sonderzeichen. Nur mit Unicode lassen sich alle benötigten Zeichen sparsam und eindeutig verwalten.

Die Praxis ist leider noch weit davon entfernt: Die unvermeidbare Umstellung auf Unicode wird noch Jahre dauern.
Deshalb sollte man jede Gelegenheit nutzen, bestehende Lösungen auf Unicode umzustellen.
Kann ihre Datenbank die Namen und Adressen von Lieferanten und KundInnen originalgetreu speichern und wiedergeben ? Werden die 'eigenen' deutschen Umlaute auch für ausländische KundInnen richtig codiert ?
Rechts einige kleine Auswahl von Städten:
Unicode - ok Wenn die blau markierten Zeichen originalgetreu angezeigt werden, dann versteht ihr Browser Unicode und ihr Betriebssystem bietet dazu einen Zeichensatz.
Unicode - ok Auch ihre Textverarbeitung versteht ziemlich sicher Unicode - kopieren sie die Städte-Namen einmal dorthin . .
Unicode - nicht ok ? Soll ausgerechnet ihre Datenbank demonstrieren, dass sie die europäische Integration verschlafen haben ?

Datenbank-Software:

Je nach Datenbank-Hersteller und -Version wird Unicode in unterschiedlichem Ausmaß unterstützt.

Der Algorithmus von → UTF-8 erlaubt jedoch das Speichern aller Unicode-Zeichen in ganz normalen Text-Feldern und kann daher sofort in jeder Datenbank eingesetzt werden, auch in älteren Versionen.

Alle gängigen Datenbank-Server Programme bieten mittlerweile zusätzliche Unicode-Unterstützung, z.B. zum Suchen und Sortieren, sowie Funktionen zum Codieren und Decodieren. Die Speicherung der Texte erfolgt fast immer nach → UTF-8, seltener nach → UTF-16.

Als Bedienungs-Oberfläche (User Interface) von Datenbanken werden meistens Webseiten eingesetzt. Das dazu verwendete → HTML ist absolut Unicode-kompatibel.
(Ausnahme Mit Frontpage hergestellte Webseiten neigen ungefragt zur Verwendung firmen-eigener Zeichensätze, abseits jeder internationalen Norm)...
Auch alle gängigen Programmiersprachen zur Erstellung von dynamischem HTML-Code (→ Javascript, → Perl, → PHP, ..) unterstützen Unicode.

Umstellung auf UTF-8:

Wenn die Gelegenheit besteht, eine neue Datenbank zu erstellen, oder ein bestehendes System zu reformieren, dann sollte unbedingt die Gelegenheit genutzt werden, die enthaltenen Texte auf Unicode umzustellen !

In Mitteleuropa wird vorteilhaft → UTF-8 verwendet, die gängigste Form der Codierung von Unicode-Zeichen: Bei der Umstellung nimmt der Speicherbedarf nur um ca. 5% zu, dafür gewinnt man die Möglichkeit, (fast) alle weltweit verwendeten Zeichen in den Texten zu verwenden.

Allerdings müssen nicht nur die Daten nach UTF-8 codiert werden, auch die gesamte daran anschließende Software muss damit arbeiten. Da gängige Software jedoch Unicode bereits recht gut 'versteht', wird der Aufwand dazu laufend geringer.

Zum Austausch von Daten verwendet man vorzugsweise den frei verwendbaren internationalen Standard → XML. Bei XML-Daten ist UTF-8 als Standard-Codierung üblich.

User-Interface:

Moderne Datenbanken werden fast ausschließlich über dynamische Webseiten bedient.
Ausgabe: Unicode-Zeichen können auf jeder Webseite problemlos dargestellt werden, und zwar ohne zusätzliche Maßnahmen, Zusatzprogramme oder Plugins.
Die Eingabe von Unicode-Zeichen birgt jedoch einige Tücken: Prinzipiell können die Eingabe-Felder von HTML-Formularen Unicode-Zeichen aufnehmen. Die Eingabe über die Tastatur ist jedoch meist sehr mühsam, die nachfolgende Verarbeitung ist von gängigen Programmiersprachen noch nicht gut unterstützt.

Details zum Thema HTML-Unicode

Griechische Zeichen
und andere Zeichen U>+007F mit Pseudo-Schriften

Griechische Zeichen werden in Mathematik, Physik und Technik häufig verwendet. Dazu bietet Unicode alle griechischen Zeichen im Bereich ' Greek and Coptic', weiters zahlreiche mathematische und technische Symbole, z.B. im Bereich 'Mathematical Operators'.

Wenn man diese Unicode-Zeichen verwendet, dann werden die Dokumente weltweit unverändert angezeigt. Außerdem kann man Schrift-Famile, Schnitt, Farbe und Größe passend zum Layout wählen. Beim Kopieren / Einsetzen bleiben die Zeichen immer erhalten. Beim Suchen werden die Zeichen richtig erkannt und nicht mit lateinischen Zeichen verwechselt.
Guter HTML-Code Guter HTML-Quellcode:
&alpha; &beta; &gamma; &delta; &epsilon; &phi; &omega;
Live-Ergebnis   (Schrift-Familie) 'echte' griechische Zeichen:
α β γ δ ε φ ω
(sans-serif)
α β γ δ ε φ ω
(serif)
α β γ δ ε φ ω
(monospace)
"Echte" Griechische (Unicode)-Zeichen zum Kopieren und Einsetzen (erfordert Javascript-fähige Browser):
α β γ
Eine häufige Unsitte besteht darin, lateinische Zeichen zu verwenden, und sie mit der Schriftfamilie 'Symbol' in Form griechischer Zeichen darzustellen.
Die Zeichen bleiben in diesem Fall lateinisch! Nur wenige Programme berücksichtigen bei der Verarbeitung die Schrift-Familie. Daher werden z.B. beim Kopieren / Einsetzen meist nur die lateinischen Zeichen übertragen.
Bei der automatischen Text-Analyse ergeben solche Texte fehlerhafte lateinische Worte (z.B. Suchmaschinen, Text-Indizierung im lokalen Netzwerk, ...).
Schlechter HTML-Code Schlechter HTML-Quellcode:
<span style='font-family:Symbol'>
a b c d e f g
</span>
Live-Ergebnis (lateinische ! Zeichen in der Schrift 'Symbol'):
a b c d e f g
Die Hilfe-Texte mancher M$-Programme geben zum Stichwort "Unicode" den zweifelhaften Rat, die Schrift 'Arial Unicode'; zu verwenden, und auch diese nur dann, wenn keine 'Schriften der jeweiligen Schriftsysteme' zur Verfügung stehen - Gemeint sind Schriften wie 'Symbol' mit 1-Byte Codierung zur Pseudo-Darstellung von Zeichen >U+007F.
Daten mit solcherart codierten Texten kann man international nicht fehlerfrei verwenden !
Pseudo-kyrillische und andere 1-Byte Sonder-Schriften sind wahrscheinlich schon im Nachbarland unleserlich. Einzig die Schrift 'Symbol' ist einigermaßen weit verbreitet - Auch sie wird besser durch echte griechische Unicode-Zeichen ersetzt.
Das ist ein schlechter Rat, der nicht einmal innerhalb der EU funktioniert. Genau umgekehrt ist es besser, kostenlose Unicode-Schriften (z.B. von SourceForge ) zu installieren.
Damit ist man nicht auf die Schrift Arial beschränkt.
Der Umfang der Daten nimmt nicht merkbar zu, wenn man vorwiegend lateinische Zeichen verwendet.
Die Daten sind garantiert international eindeutig - unabhängig von Betriebssystem und Software !

Symbole und Pseudografik

GIF-Grafik, 879 Byte Unicode enthält viele Symbolzeichen, z.B. in den Bereichen 'Arrows', 'Geometric Shapes', 'Mathematical Operators', 'Miscellaneous Symbols', 'Dingbats', . . .

Die Symbole sind weltweit eindeutig und brauchen viel weniger Platz als selbst die kleinste Grafik.
Jedes der rechts gezeigten Unicode-Symbole benötigt nur 8 Byte für den HTML-Code (rechts oben) !
Typische GIF-Grafik ungefähr gleicher Größe braucht 100-1000 Byte für die Grafik, dazu noch ca. 100 Byte für den HTML-Code.
Unicode-Zeichen können (im Gegensatz zu Grafik-Icons) in Farbe und Größe beliebig variiert werden. Die Demo rechts verwendet dazu CSS.

Keine Standard-Schrift zeigt derzeit alle hier angeführten Symbole an, für manche werden Platzhalter verwendet. Sie können die Anzeige meist bedeutend verbessern, wenn sie die kostenlosen Standard-Schriften von SourceForge laden.

Keine Symbolschriften ! Verwenden sie keinesfalls Schrift-Familien ('Dingbats', ...) zur Darstellung von Symbolen: Sie sind nicht auf allen PC verfügbar und zeigen nicht notwendig die gleichen Zeichen an. Beim Kopieren / Einsetzen oder bei der Datenübertragung kann die Schriftfamilie verloren gehen, die Zeichen werden dann lateinisch angezeigt.
Einige UNICODE-Symbole: &#x00A0;
Farbe:
Größe:
Klicken sie zur Demonstration Farbe oder Größe.

Pseudografik:

Die erste bescheidene Grafik-Möglichkeit von Uralt-PC bestand in der Darstellung sog. Pseudografik-Zeichen - verschiedene Linien mit Ecken, Verbindungen usw.
Unicode bietet mit den Bereichen 'Box Drawing' und 'Block Elements' Möglichkeiten zur PC-Nostalgie. Sie müssen allerdings eine Schrift gleicher Buchstaben-Breite (monospace) verwenden.
Vorsicht - testen sie vor Verwendung mehrere Programme !
╔═══════════╗
║ C:\> DOSe ║
╚═══════════╝   

UNICODE in der Programmierung

String-Länge

Dieser Begriff und alle Funktionen, welche die String-Länge zurückgeben, sind in allen Programmiersprachen mit Vorsicht auf Unicode anzuwenden.
Testen sie im Zweifel ihre Software ! - Manchmal ändert sich das Verhalten der String-Länge mit der Software-Version !

Theoretisch sollte die String-Länge der Anzahl Zeichen in einem String entsprechen.
Praktisch ergeben manche Funktionen noch die Anzahl Bytes - Das ist bei Unicode jedoch abhängig von der Speicherform. Details dazu auf der UTF-Seite.

C++:

Die Typen wchar_t und wchar_t * bieten Unicode-Unterstützung. Diese Typen werden je nach Compiler mit unterschiedlicher Byte-Anzahl codiert - das sollte mit einem entsprechenden Macro abgefangen werden.

Seit ISO C 99 stehen zahlreiche Funktionen für wchar_t und Strings daraus zur Verfügung. Bei den Standard-Funktionen wie strcmp ist jedoch Vorsicht geboten: Testen (auch mit Strings, die Null-Bytes enthalten) !

Java und Javascript:

Java bietet derzeit vermutlich die beste Unicode - Unterstützung aller Programmiersprachen. Version 1 unterstützt Unicode 1.1, seit Version 1.1 Unicode 2.0.
Java und Javascript verwenden zur internen Darstellung von Zeichen und Zeichenketten (Strings) Unicode (→ UTF-16).
Strings können Unicode-Zeichen enthalten.
Unicode-Zeichen bis U+FFFF können in Text-Konstanten mit \u und nachfolgenden 16-Bit Hexadezimalcode (4 Ziffern) maskiert werden.
Unicode-Zeichen bis U+FFFF können mit den Standard-Funktionen String.fromCharCode() codiert und mit charCodeAt() decodiert werden.
Mit → DOM-Methoden kann man Unicode-Zeichen an jede beliebige Stelle einer Webseite schreiben. → HTML-codierte Zeichen (&Auml;) funktionieren nicht !
Beispiele:
// Guter Code (3 Varianten) für 'Ä':
test = "\u00C4";
test = String.fromCharCode(196);
test = String.fromCharCode(0xC4);
// Schlecher Code:
test = "Ä"; // nur in de-Betriebsystem !
test = "&Auml;"; // funktioniert nicht
//Live-Test:
alert("\u00C4nderung !");

Live Javascript Live-Test aller 5 Varianten mit Meldungsfenster (alert)

Perl:

Seit Version 5 speichert Perl Strings intern im → UTF-8 Format. Funktion length() ergibt die Länge in (Unicode)-Zeichen, nicht in Byte !
Bis Version 6 mussten die Unicode-Module von CPAN verwendet werden, ab Version 6 unterstützt 'native'-Perl Unicode.

Das CPAN-Modul XML::Parser verwendet eigene Funktionen für die Codierung/Decodierung von Unicode (UTF)-Zeichen.

my $alpha = pack('U',0x3B1); # pack-Funktion
my $euro = "\0x20AC";
my $smiley = "\x{263A}";
Erstellung von Konsolen-Programmen mit Perl:
Beachten sie, dass die meisten → Konsolen-Programme   (shell, cmd.exe) keine Unicode-Zeichen darstellen können.
Erstellung dynamischer Webseiten (→ CGI-Programme) mit Perl:
Sie dürfen nur dann Unicode-Zeichen verwenden, wenn der Zeichensatz z.B. mit → UTF-8 angegeben wurde. Besser ist die Verwendung von → HTML-Code.

PHP:

'Gewöhnliche' Strings können keine Unicode-Zeichen enthalten, die Funktionen chr und ord arbeiten nur mit den Codes #0..FF (0..255) des lokalen Zeichensatzes und geben bei Codes >#FF keine Warnung !
Zur Verarbeitung von Unicode-Strings dient das Modul → mbstring (Multibyte-String). Wenn sie mit einem externen Internet-Provider arbeiten, sollten sie vor Verwendung dieser Funktionen sicherstellen, dass auch dort das Modul mbstring verfügbar ist.
Leider verwendet das Modul offenbar keine einheitliche Drehscheibe (z.B. → UTF-8 oder → UTF-16) mit Anschluss-Funktionen zu allen anderen Codes, sondern löst jede Codier- und Verarbeitungs-Aufgabe einzeln.
Das Modul bietet zahlreiche Funktionen zur Verarbeitung unterschiedlich codierter Strings. Der Aufwand ist groß, die Brauchbarkeit im Vergleich zu den genial einfachen Java-Funktionen eher gering.
Details zu PHP-Modulen.
Details zum Modul mbstring.

Ohne mbstring kann man sich anders helfen:
Eine Lösung ist die Verwendung von UTF-8 Strings (Code-Beispiele mit → UTF-8). Sie enthalten nur Bytes #00..FF und können daher ohne Zusatz-Modul mit allen üblichen String-Funktionen verarbeitet werden. Diese arbeiten jedoch ohne Rücksicht auf UTF-8 - Vorsicht, testen !
Eine weitere Möglichkeit ist die Verwendung von Arrays:
Die Unicodes von Strings können als Arrays ganzer Zahlen gespeichert werden. Die Decodierung zu Strings kommt (s.o.) nicht in Frage, allenfalls die Ausgabe auf HTML-Webseiten, so wie im Beispiel rechts.
// Modul 'mbstring' geladen ?
$mbs_ok = 0;
if (extension_loaded('mbstring')) {$mbs_ok++;}
// Laden zur Laufzeit:
else { @dl('mbstring.so'); }
if (extension_loaded('mbstring')) {$mbs_ok++;}
print "mbs_ok = $mbs_ok";

// Unicode in PHP-Arrays:
function array_to_html($a) {
$h = '';
foreach ($a as $v) {
$uc = $v+0;
if($uc<128) {$h.=htmlentities(chr($uc));}
else {$h.="&#$uc;";}
}
return $h;
}
$a1[]=0x41; $a1[]=0xE4; $a1[]=0x3B1;
print array_to_html($a1);
// Ausgabe: Aäα

HTML:

Der HTML-Quellcode kann in verschiedenen Codes erstellt werden, darunter → UTF-8 oder → UTF-16.
Beliebige Unicode-Zeichen kann man mit der Standard - Maskierung & {Name oder dezimal oder hexadezimal} ; darstellen - Rechts 3 Beispiele für 'Eine größere Änderung' - Verwenden sie im HTML-Quelltext keinesfalls (!) deutsche Umlaute oder andere Sonderzeichen, sondern nur die korrekt HTML-codierten Zeichen !
Die Eingabe in Formular-Felder kann man nach verschiedenen Codes decodieren, darunter auch UTF-8 und UTF-16.
Zur Live-Programmierung von Webseiten mit Javascript-DOM-Methoden verwendet man eine der ↑ Javascript-Methoden. Achtung - HTML-maskierte Zeichen wie &#x00C4; lassen sich nicht in einen DOM-Knoten schreiben !
Verwenden sie für das Euro-€-Zeichen im HTML-Quelltext immer &euro;, niemals (wird von manchen M$-Programmen eingesetzt, ergibt jedoch Fehler mit anderen Browsern und auf nicht-europäischen Systemen..
Details zu Zeichen in HTML
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...
Eine gr&ouml;&szlig;ere &Auml;nderung ...
Eine gr&#246;&#223;ere &#196;nderung ...
Eine grö&#x00F6;&#x00DF;ere &#x00C4;nderung ...
...
<form accept-charset="UTF-8">
</form>
...

Umlaute im HTML-Quelltext:
richtig &Auml; und falsch Ä.
Euro-Zeichen im HTML-Quelltext:
richtig &euro; und falsch .

XML:

verwendet zur Codierung von → UTF-8 und/oder → UTF-16.
Im Beispiel rechts ist im Element <dat></dat> der Text 'eine größere Änderung der α-Übung' enthalten. Beachten sie den Code bei Codierung und Decodierung (XML-Parsen).
Im Beispiel sind alle Zeichen UTF-8-codiert, der Quelltext ist daher nur bedingt 'lesbar':
Zeichen (Unicode→UTF-8):
ö (F6→C3B6), ß(DFC39F), Ä(C4C384), α(3B1CEB1), Ü(DCC39C).

<?xml version="1.0" encoding="utf-8"?>
<dat>
  eine größere Änderung der α-Übung
</dat>

VisualBasic:

Im nächsten ↓ Kapitel.

Zwischenablage:

Angezeigte Unicode-Zeichen (auch von Webseiten wie dieser) aller gängigen Betriebssystene und Programme können problemlos kopiert und eingesetzt werden.
Beispiele: ↑ Griechische Zeichen, ↑ Symbole.

Das gilt nur für korrekte Unicode-Zeichen, nicht jedoch für (nur bei M$) falsch codierte €-Zeichen oder für lateinische Zeichen, die mit der Pseudo-Schrift 'Symbol' als griechische Zeichen vorgetäuscht werden.

Unicode in VBA

VisualBasic:

Unicode-Zeichen bis U+FFFF werden mit ChrW(n) codiert und mit AscW(c) decodiert.
Strings können Unicode-Zeichen enthalten.
Allerdings gibt es wie bei M$ üblich einige Stolpersteine . .

unicode_chr = ChrW(n)
unicode_asc = AscW(c)
Sehen sie dazudie beiden Demo-Funktionen unicode_chr und unicode_asc weiter unten.
Probleme mit ChrW und AscW:
AscW liefert negative Werte für Zeichen >U+7FFF. Die Ursache dieses Fehlers ist der falsche Typ (Integer) der Funktion AscW. Wandeln sie das Ergebnis in den Typ Long um und addieren sie &H10000 zu allen negativen Werten.
Aus dem gleichen Grund sollten sie ChrW immer mit Argumenten vom Typ Long verwenden.
AscW funktioniert angeblich (Original-Info von M$) auf MacOS nicht zuverlässig. Der Rat, AscW dort nicht zu verwenden, ist kein guter Scherz, da es für die Funktion in VBA keinen Ersatz gibt. Man könnte die fehlende Funktion natürlich in C++ programmieren, aber wer programmieren kann, verwendet ohnehin andere Programmiersprachen als VBA . .

Der Code-Bereich &H80..&H9F wird von M$ leider nicht nach Unicode-Standard verwendet, sondern nach der firmen-eigenen Zeichensatz-Familie → CP125*. In diesem Bereich geben die parallelen Funktionen ungleiche Ergebnisse !
Chr liefert das CP125* Zeichen
ChrW liefert das Unicode Zeichen
Asc liefert den CP 125* Code
AscW liefert den Unicode
Access, Excel, Word:
Die Excel-Funktionen Zeichen() zum Codieren und Code() zum Decodieren von Zeichen decken aus unerfindlichen Gründen nur den Bereich bis U+00FF ab. Mit VBA-Funktionen wie im Beispiel rechts lassen sich problemlos alle Unicode-Zeichen bis U+FFFF in M$-Office-Programmen verwenden.

Die beiden Demo-Funktionen arbeiten mit Unicode: unicode_asc ergibt z.B. den richtigen Unicode U+8364 für das €-Zeichen, nicht den inkompatiblen → CP125*-Code 128. Man kann auf den M$-Code ganz verzichten, da selbst M$-Programme mittlerweile problemlos mit den Standard Unicode-Zeichen arbeiten.

Funktion unicode_asc enthält eine Korrektur für falsche (negative) Ergebnisse von AscW. Damit kann man die Funktion korrekt für den Bereich U+0000..U+FFFF verwenden. Unicode-Zeichen > U+FFFF kann derzeit vermutlich kein M$-Programm verwenden.

Function unicode_chr(unicode As Long) As String
' Gibt ein Unicode-Zeichen zurück
unicode_chr = ChrW(unicode)
End Function

Function unicode_asc(zeichen As String) As Long
' Gibt den Unicode eines Zeichens zurück
Dim uc as Long
uc = AscW(zeichen)
If uc < 0 Then uc = uc& + &H10000
unicode_asc = uc&
End Function
VBA bietet die Funktion StrConv zur String-Umwandlung. Laut Manual dient sie mit den Konstanten vbUnicode und vbFromUnicode zur Umwandlung von Strings nach und von Unicode. Das wird leider in der Praxis nicht bestätigt. Da stört es auch nicht, dass diese Funktionen auf MacOS nicht verfügbar sind.

StrConv(input_string, vbFromUnicode) gibt stets genau den gleichen String ohne Änderung zurück.
Diese Angaben wurden experimentell getestet und sind ohne Gewähr !
StrConv(input_string, vbUnicode) führt merkwürdige Zeichen-Umwandlungen durch:
Zeichen mit Code 128..159 (#80..#9F) werden in → CP125* Zeichen umgewandelt (vermutlich System-spezifisch).
Unicode-Zeichen mit Code>256 werden nach einem eigenartigen Algorithmus (jedenfalls nicht → UTF) in je 2 Zeichen umgewandelt.
Unicode-Zeichen mit Code 256, 512, .. und Vielfachen davon werden ganz unterdrückt.
Der Sinn dieser Funktion ist vermutlich nur in M$-Insider-Kreisen bekannt.


XHTML CSS