Thema der Woche: Unicode und Kodierungen
Java verarbeitet Zeichen (bisher) intern in 2-Byte Unicode. Gespeichert werden Daten aber in der Regel in UTF-8 oder, für uns in Europa, in Latin-1. Thema der Woche ist Unicode und die Umkodierungen. Am Anfang sollen The Ten Commandments of Unicode von Elliotte Rusty Harold stehen:
- I am Unicode, thy character set. Thou shalt have no other character sets before me.
- Thou shalt carefully specify the character encoding and the character set whenever reading a text file.
- Thou shalt not refer to any 8-bit character set as “ASCII”.
- Thou shalt ensure that all string handling functions fully support characters from beyond the Basic Multilingual Plane. Thou shalt not refer to Unicode as a two-byte character set.
- Thou shalt plan for additions of future characters to Unicode.
- Thou shalt count and index Unicode characters, not UTF-16 code points.
- Thou shalt use UTF-8 as the preferred encoding wherever possible.
- Thou shalt generate all text in Normalization Form C whenever possible.
- Thou shalt avoid deprecated characters.
- Thou shalt steer clear of the private use area.
Da schließen sich nun einige Fragen an, die es zu klären gilt:
- Was ist der Unterschied zwischen ASCII, Unicode 2 und Unicode 4?
- Was ist ein Code-Point? Welche Funktionen in Java 5 sind wegen Unicode 4 hinzugekommen? Welche beiden Funktionen zum Zugriff auf ein Zeichen gibt es? Resultieren daraus Performance-Unterschiede?
- Was ist eine Kodierung? Wie wird sie in Java bestimmt? Durch einen String oder durch eine Klasse?
- Welchen Funktionen/Konstruktoren der Java Klassenbibliothek nehmen eine Kodierungskennung entgegeben? Nenne mehrere Wege, wie man Strings/Byte-Felder umkodiert.
- Gibt es XML-Parser in Java, die Unicode 4 unterstützten? Was sagen die Autoren von XML-Parsern zu Unicode 4?
- Warum kann es beim Datenbankzugriff auf Textspalten Probleme geben? Gibt es dokumentierte Probleme/Lösungen?
Auch neu: tutego's Clip-Art Seite. Links zu weiteren Clip-Art Sammlungen (ohne die lästigen Popup-Menüs) sind willkommen.
Labels: Die wöchentliche Dosis Java

2 Comments:
Kleine Korrektur: es gibt kein "Unicode 2" oder "Unicode 4", wenn dann höchstens "Unicode 2.0" oder "Unicode 4.0" (wobei aktuell 5.0 ist).
Was du vermutlich meinst, ist UCS-2/UCS-4, was eine kodiermoeglichkeit (eines Teils) von Unicode ist.
Dort ist die länge eines Zeichens fest auf 2 bzw. 4 Bytes festgelegt, wodurch bei ersterem nur Zeichen der Basic Multilingual Plane (BMP) kodiert werden können, und somit nur ein kleiner Teil des Unicodezeichensatzes unterstützt wird. Unicode besitzt nämlich mehr als 2^16 Zeichen.
UTF-16 dagegen erlaubt es, mehrere "Codepoints" zu kombinieren, um Zeichen ausserhalb der BMP zu kodieren (durch sogenannte "Surrogate Pairs").
Daher auch die Untescheidung von Code-Points und Zeichen.
By
Anonym, at März 26, 2008 3:10 PM
Ich schenke mir hier die Untergruppen Unicode 2.0, 2.1, 2.1.2, genauso wie man Java 1.4 statt Java 1.4.2 sagt. Die von "anonym" angesprochenen Punkte erklären aber genau das, worum es in der Aufgabe geht.
By
Christian Ullenboom, at März 31, 2008 1:07 PM
Kommentar veröffentlichen
<< Home