UTF-8 Kodierung
Eine Kodierung ist nichts anderes als eine Tabelle, in der jedem Zeichen eine Nummer zugeordnet wird.
Symbol
|
Nummer
|
---|---|
№
|
№
|
ψ
|
ψ
|
☺
|
☺
|
Am Anfang stand der ASCII (american standard code for information interchange) Code, der 128 Zeichen umfasste. Später gab es den erweiterten ASCII Code, der bereits 256 Zeichen umfasste.
Diese Code Tabellen waren aber schon bald zu klein und es musste eine neue Tabelle her. Am besten eine Tabelle in der alle Zeichen aller Sprachen Platz finden, und die am besten einheitlich ist. Man braucht nur an die russische Schrift, die japanischen Schriftzeichen oder die hebräische Schrift denken. Mit der UTF-8 Kodierung sollte das nun gelingen.
UTF-8 ist eine Unicode-Kodierung und steht für 8-bit Unicode Transformation Format. Mit UTF-8 können bis zu 4 Byte, das theoretisch maximal heißt 2.097.152 Zeichen dargestellt werden. Damit sollte jedes Schriftzeichen des Unicodestandards seinen Platz finden. Auch sollten damit die Html-Sonderzeichen wie ä ü ö oder ß der Geschichte angehören.
Das UTF-8 Schema
Mit diversen Steuerzeichen werden Daten, Start- bzw. Stop-Flags markiert. Die Größe, d.h. die Anzahl der Bytes durch die ein Symbol repräsentiert wird, wird durch die Codenummer des Symbols innerhalb der Unicodetabelle festgelegt.
- 0: Leitet die Darstellung mit einem Byte ein
- 110: Das Start-Flag für ein Unicodezeichen bestehend aus 2 Byte’s
- 1110: Das Start-Flag für ein Unicodezeichen bestehend aus 3 Byte’s
- 11110: Das Start-Flag für ein Unicodezeichen bestehend aus 4 Byte’s
- 10 bedeutet: Jetzt kommen Daten. Diese Kombination kann daher nur mit einem Steuerzeichen der obigen Liste vorkommen.
In der folgenden Tabelle steht jedes x für die eigentliche Angabe der Codeposition. Die roten Angaben stehen für die oben erwähnten Steuerzeichen.
Byte Stream | Ansprechbare Symbole |
---|---|
0xxx.xxxx | 7 Bits = 27= 128 Zeichen |
110x.xxxx 10xx.xxxx | 11 Bits = 211= 2.048 Zeichen |
1110.xxxx 10xx.xxxx 10xx.xxxx | 16 Bits = 216= 65.536 Zeichen |
1111.0xxx 10xx.xxxx 10xx.xxxx 10xx.xxxx | 21 Bits = 221= 2.097.152 Zeichen |
Einige Beispiele
- Russisches: абвгдежзийклмнопрстуфхцчшщъыьэюя
- Griechisch: Μπορώ να φάω σπασμένα γυαλιά χωρίς να πάθω τίποτα
- Polnisch: Mogę jeść szkło, i mi nie szkodzi
- Rumänisch: Pot să mănânc sticlă i ea nu mă rănete
- Hebräisch: אני יכול לאכול זכוכית וזה לא מזיק לי
- Yiddish: איך קען עסן גלאָז און עס טוט מיר נישט װײ
- Arabisch: أنا قادر على أكل الزجاج و هذا لا يؤلمني
Die Umstellung am Server
Stellt man die Kodierung direkt am Server ein, muss das beim Apache Webserver und dem Php Modul geschehen.
Apache2
[highlight=Php]# mod_mime-defaults.conf
# Damit wird in der html Seite per <meta> Tag entschieden, welche Kodierung vorliegt
AddDefaultCharset Off[/highlight] z.B. [highlight=HTML]http-equiv="Content-Type" content="text/html; charset=utf-8"
[/highlight]
http-equiv="Content-Type" content="text/html; charset=iso-8859-1"
PHP5
[highlight=Php]# php.ini
#auskommentueren, also auch hier keine Vorgaben vom Server aus
;default_charset=“iso-8859-1″[/highlight]
MySQL
Die Kollation aller Tabellen auf utf8-general-ci umstellen, und bei einer Abfrage zuerst folgenden QUERY absetzen [highlight=MySQL]# direkt nach dem Verbindungsaufbau
mysql_query(‚SET NAMES „utf8″‚);[/highlight] z.B. [highlight=Php]$db = mysql_connect ($server,$user,$password);
if ($db) {
mysql_select_db($database, $db);
mysql_query(‚SET NAMES „utf8″‚);
$ergebnis=mysql_query(„SELECT * FROM Test ORDER BY datum DESC“);
}
mysql_close($db);[/highlight]