| 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
|
Missverständnisse und Probleme |
|
Unicode ist nicht vergleichbarUnicode 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 UTFIm 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. |
PlatzbedarfUnicode-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 |
||||||||||||||||||||||
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.
|
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:
|
|||||||||||||||||||||
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-EditorenText-Editoren sind Programme zur Textbearbeitung, wie sie typisch von EntwicklerInnen benutzt werden. |
|||
TastaturAlle 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
. 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. |
||
CharMapWindows 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 ! |
||
Die integrierte Hilfe kennt die Begriffe 'Sonderzeichen' und 'UTF',
jedoch nicht 'Unicode'. |
● Für den Export von Text als → UTF-8 Datei wird in neueren Versionen eine gut versteckte Option angeboten: • Menü , Dateityp=. Button . • Ein Fenster warnt vor Verlusten. Klicken sie • Ein Fenster mit dem unsinnigen Namen erlaubt die Auswahl von Zeichensätzen, darunter UTF-7, UTF-8 und 'Unicode' (verwendet UTF-16). ♦ Details zur UTF-Codierung von Unicode-Zeichen. |
||
unterstützt Unicode schon recht gut, die Werkzeuge dazu sind allerdings
sorgfältig versteckt: |
|||
| Griech. α Euro €: |
03B1 Alt-c 20AC Alt-c |
VI Improved (Linux):
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: |
|
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
|
|||||||
|
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. |
α β γ δ ε φ ω
Live-Ergebnis (Schrift-Familie) 'echte' griechische Zeichen:
|
||||||
|
"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, ...). |
<span style='font-family:Symbol'>
Live-Ergebnis (lateinische ! Zeichen in der Schrift 'Symbol'):
a b c d e f g
</span>
a b c d e f g
|
||||||
|
▼ 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 |
|||||
|
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. |
|
||||
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ängeDieser 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 (Ä) 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 = "Ä"; // funktioniert nicht //Live-Test:
alert("\u00C4nderung !");
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. |
|
|
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 Ä lassen sich nicht in einen DOM-Knoten schreiben ! ▲ Verwenden sie für das Euro-€-Zeichen im HTML-Quelltext immer €, 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ößere Änderung ... Eine größere Änderung ... Eine gröößere Änderung ... ... <form accept-charset="UTF-8"> </form> ... Umlaute im HTML-Quelltext: richtig Ä und falsch Ä. Euro-Zeichen im HTML-Quelltext: richtig € 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), ß(DF→C39F), Ä(C4→C384), α(3B1→CEB1), Ü(DC→C39C). |
<?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)
Sehen sie dazudie beiden Demo-Funktionen unicode_chr
und unicode_asc weiter unten.
unicode_asc = AscW(c) |
|
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 FunctionFunction unicode_asc(zeichen As String) As Long ' Gibt den Unicode eines Zeichens zurück
Dim uc as Long
uc = AscW(zeichen)
End Function
If uc < 0 Then uc = uc& + &H10000 unicode_asc = uc& |
|
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. |
|
|
UNICODE.org -
UNICODE Homepage,
Code-Übersicht,
Character Encoding Model,
Resourcen
(Fonts, Tools), Standard Compression Scheme,W3C: (Worldwide Web Consortium) Charset, Character Entity Reference (Zeichen-Namen) IANA: Character Set Registry |
SelfHTML: Unicode
und UTF
mit Javascript (Online Codierung / Decodierung) faqs.org: RFC 2152 - UTF-7 IETF (Internet Engineering Task Force): UTF-8 dmoz - open directory project: UNICODE (Links) MySQL: Unicode and other funny characters, Character set support |
|
Alan Wood:
UNICODE Fonts for Win,
UNIX,
MacOSX Mattandjess: C++ und UNICODE EKI: Data on Languages (Online) RF-Net: Perl und UNICODE Perl: Unicode support Perl (CPAN): div. Unicode-Funktionen Python: Unicode Database |
Production First Software:
Encyclopedia of Typography and Electronic Communication Zvon: Character Search Univ.Oxford: Online UNICODE characters Sourceforge: ICU - Unicode Libraries für C++ und Java, FileList ( smart package von M$ Unicode Schriften) |
|
|