Zeichensalat vermeiden - Teil 1 von 3

von Andreas Gallien (Kommentare: 0)

Einleitung

Sofern am Anfang eines Projekts die Mehrsprachigkeit einer Anwendung kein Thema war, aber plötzlich Anforderungen zum Ausbau einer PHP-Altanwendung auf ein mehrsprachiges System mit Zeichensätzen außerhalb des westeuropäischen Raums auf dem Projektplan stehen, rückt zumeist das Thema Zeichensatz und Zeichenkodierung in den Fokus des Entwicklers. Diese Punkte gilt es ebenfalls bei der Konzeption einer neuen Anwendung zu bedenken, denn ansonsten kann auf HTML-Seiten oder in den zu versendenden E-Mails Zeichensalat mit kryptischen Ausgaben erscheinen.


Abbildung 1: Ausgabe einer HTML-Seite mit fehlerhaft dekodierten Zeichen

Bei der Umstellung auf Unicode sind mehrere Aspekte zu beachten, d. h. die Datenbankinhalte müssen von ISO-8859-1 (Latin-1) auf Unicode umgestellt, Dateien konvertiert und die gesamte Anwendung auf problematische Funktionen hin überprüft werden. Diese 3-teilige Artikelserie stellt die wesentlichen Aktivitäten für eine sichere Umstellung auf Unicode vor, wobei vorab auf den Unterschied zwischen Zeichensatz und Zeichenkodierung eingegangen wird.

Zeichensätze verstehen

Ein Zeichensatz beinhaltet einen definierten Zeichenvorrat, z. B. bildet der ursprüngliche ASCII-Zeichensatz 128 Zeichen für den angloamerikanischen Raum ab. ISO-8859-1 erweitert den ASCII-Zeichensatz um weitere 128 Zeichen und bietet somit einen zusätzlichen Zeichenvorrat für die meisten westeuropäischen Länder. Mit Unicode lassen sich mehr als vier Milliarden Zeichen definieren, wobei die aktuelle Unicode Standard Version 6.0 derzeit „nur“ knapp 110.000 Zeichen nutzt. Unicode vereinfacht somit den Umgang mit weltweit vorhandenen unterschiedlichen Zeichen, denn sie sind in einem einzigen Standard gebündelt. Die kombinierte Ausgabe von deutschen und russischen Zeichen auf einer einzigen HTML-Seite stellt damit zum Beispiel kein Problem mehr dar.

Zeichenkodierungen einsetzen

Jedem Zeichen eines Zeichensatzes ist ein Binärmuster zugordnet, das ein entsprechendes Zeichen kodiert. Diese Zeichenkodierung besteht im ASCII-Zeichensatz aus 7 Bit und im ISO-8959-1-Zeichensatz aus 8 Bit. Bei Unicode werden hingegen 4 Byte benötigt. Um bei der Speicherung und Übertragung von Zeichen im Unicode Platz zu sparen, lässt sich Unicode neben den vorhandenen 4-Byte-Kodierungen wie UTF-32 als UTF-8 und UTF-16 kodieren. In UTF-8 belegt jedes Zeichen variabel zwischen 1 und 4 Byte, in UTF-16 sind es hingegen immer 2 Byte. Somit definiert UTF-8 streng genommen keinen eigenen Zeichensatz, sondern ist eine mögliche Zeichenkodierung für Unicode.

Byte Order Mark voranstellen

Erwähnenswert ist in diesem Zusammenhang die Byte Order Mark (BOM), die bei UTF-16 und UTF-32 am Anfang eines Datenstroms oder Datei stehen muss, um die Byte-Reihenfolge der Zeichenkodierung festzulegen. In UTF-8 kann ebenfalls eine bestimmte Byte-Reihenfolge den Datenstrom oder die Datei einleiten, um sie als UTF-8 zu kennzeichnen, muss es aber nicht.

Byte Order Mark EF BB BF am Anfang einer Datei
Abbildung 2: Byte Order Mark EF BB BF am Anfang einer Datei

Nach dieser kurzen Einführung beschäftigt sich der nächste Teil der Artikelserie mit der Umstellung von ISO-8859-1 auf Unicode in der Datenbank MySQL.

Inhalt

  1. Zeichensalat vermeiden - Teil 1 von 3
  2. Zeichensalat vermeiden - Teil 2 von 3
  3. Zeichensalat vermeiden - Teil 3 von 3

Zurück

Einen Kommentar schreiben