-
1.
Schei�
encoding
Codierungen und ähnliches
-
2.
Schei�
encoding
Codierungen und ähnliches
Andreas Heigl
@heiglandreas
-
3.
Historisches
Anfänge
ASCII
ISO
Unicode
-
4.
Anfänge
Lochkarten
Kein Bedarf für „Schrift“
-
5.
ASCII
American Standard Code for Information
Interchange
1963 entstanden
7-Bit Zeichensatz (128 Zeichen)
-
6.
ASCII
0 1 2 3 4 5 6 7 8 9 A B C D E F
0
1
2
3
4 A B C D E F G H I J K L M N O
5 P Q R S T U VWX Y Z
6
7
-
7.
ASCII
0 1 2 3 4 5 6 7 8 9 A B C D E F
0
1
2
3
4 A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z
6 a b c d e f g h i j k l m n o
7 p q r s t u v w x y z
-
8.
ASCII
0 1 2 3 4 5 6 7 8 9 A B C D E F
0
1
2
3 0 1 2 3 4 5 6 7 8 9
4 A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z
6 a b c d e f g h i j k l m n o
7 p q r s t u v w x y z
-
9.
ASCII
0 1 2 3 4 5 6 7 8 9 A B C D E F
0
1
2 ! ” # $ % & ’ ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~ .
-
10.
ASCII
0 1 2 3 4 5 6 7 8 9 A B C D E F
0
1
2 ! ” # $ % & ’ ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~ .
-
11.
ISO
International Standardisation Organisation
ASCII-Kompatibel
8-Bit Zeichensatz (256 Zeichen)
-
12.
-1 Latin-1, Westeuropa -9 Latin-5, Türkisch
-2 Latin-2, Mitteleuropa -10 Latin-6, Nordisch
-3 Latin-3, Südeuropa -11 Thai
-4 Latin-4, Nordeuropa -12 - nicht existent
-5 Kyrillisch -13 Latin-7, Baltisch
-6 Arabisch -14 Latin-8, Keltisch
-7 Griechisch -15 Latin-9, Westeuropäisch
-8 Hebräisch -16 Latin-10, Südosteuropäisch
-
13.
ISO-8859
-1 Latin-1, Westeuropa -9 Latin-5, Türkisch
-2 Latin-2, Mitteleuropa -10 Latin-6, Nordisch
-3 Latin-3, Südeuropa -11 Thai
-4 Latin-4, Nordeuropa -12 - nicht existent
-5 Kyrillisch -13 Latin-7, Baltisch
-6 Arabisch -14 Latin-8, Keltisch
-7 Griechisch -15 Latin-9, Westeuropäisch
-8 Hebräisch -16 Latin-10, Südosteuropäisch
-
14.
ASCII
0 1 2 3 4 5 6 7 8 9 A B C D E F
0
1
2 ! ” # $ % & ’ ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~ .
-
15.
ISO-8859-1
0 1 2 3 4 5 6 7 8 9 A B C D E F
8
9
A nbsp
¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ shy
® ¯
B ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿
C À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï
D Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
E à á â ã ä å æ ç è é ê ë ì í î ï
F ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ
-
16.
Andere Codierungen
MacRoman
WindowsLatin
...
-
17.
Unicode
1991 (1988) entstanden
Multibyte Zeichensatz (z.Zt. 1.114.112
Zeichen)
ASCII/ISO-8859-1 Kompatibel
Unterschiedliche Codierungen (UTF-8,
UTF-16, UTF-32, EBCDIC, .... )
-
18.
Unicode
U+0000 - U+10FFFF
U+0000 - U+007F -> ASCII
U+0080 - U+00FF -> ISO-8859-1
Verschiedene Codierungen möglich
-
19.
UTF-32
jedes Zeichen 4 Byte lang
Einfach
Speicherintensiv
-
20.
UTF-16
jedes Zeichen 2 Byte lang
Einfach
Codiert nur die meistgenutzten Zeichen aus
Unicode
Nur Zeichen von U+0000 bis U+FFFF möglich.
Big- oder LittleEndian?
MacOS-X, Windows, Java, .Net
-
21.
UTF-8
jedes Zeichen zwischen 1 und 4 Byte lang
Streamsicher, da Start- und Folgezeichen
unterschieden werden
Alle Unicode-Zeichen codierbar und noch viel mehr
(bis zu 2^42 - 4.398.046.511.104)
Platzsparend, da oft nur 1 Byte gespeichert
werden muss (Lateinische Schriften)
Linux, IETF
-
22.
UTF-8
Startbyte 0xxxxxxx oder 11xxxxxx
Folgebyte 10xxxxxx
0xxxxxxx für 1-Byte-Zeichen
1xxxxxxx für Mehr-Byte-Zeichen.
Die Anzahl der 1 zeigt die Anzahl der
Gesamt-Byte an
-
23.
UTF-8
00-7F ein Byte langes Zeichen (ASCII)
80-BF 2., 3. oder 4. Byte einer mehrbyte-
Sequenz
C2-DF Start einer 2 Byte langen Sequenz
E0-EF Start einer 3 Byte langen Sequenz
F0-F4 Start einer 4 Byte langen Sequenz
-
24.
UTF-8
UTF-8 Binär Unicode Fehler
U+0079
y 0x79 01111001
01111001
0xC3 0xA4 11000011 U+00E4
ä ä
10100100 11100100
-
25.
Codierung und PHP
PHP ist NICHT Unicode-sicher
Warum ist das ein Problem?
-
26.
Warum ist das ein
Problem?
Kein Problem wenn NUR EINE ISO-8859-Variante
zum Einsatz kommt.
Internationale Seiten
Mehrsprachige Texte (da langt schon ein
griechisches Wort ...)
Mehrbyte-Zeichen und strlen?
Darstellung von einzelnen Zeichen eines MehrByte-
Zeichens (z.B. ä statt ä)
-
27.
Codierung und PHP
mb_internal_encoding('UTF-8'); mb_http_input ('UTF-8'); mb_http_output ('UTF-8');
Content-type: text/html; charset=utf-8
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> und <form accept-
charset = "utf-8">
CREATE DATABASE ... DEFAULT CHARACTER SET utf8 COLLATE utf8 ... ENGINE ...
CHARSET=utf8 COLLATE=utf8_unicode_ci
SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'
default_charset = UTF-8
mb_string Funktionen
mb-Reguläre Ausdrücke
u-Modifikator für preg-RegEx
-
28.
mb_string
MultiByte-Funktionen
Ersetzen „normale“ String-Funktionen
Ermöglichen den Umgang mit UTF-8
Überladen von Standard-Funktionen für Mail (1),
String (2) und RegEx-Funktionen (4) mittles
mbstring.overload = n
-
29.
iconv
Konvertierung aus beliebigem Zeichensatz
nach z.B. UTF-8
<?php
$sourceEnc = mb_detect_encoding($string);
$targetEnc = ‘UTF8//TRANSLIT/ /IGNORE‘;
echo iconv($sourceEnc,$targetEnc,$string);
-
30.
MySQL
Server [mysqld]
default-collation=utf8_bin
Client character-set-server=utf8
collation-server=utf8_bin
Verbindung default-character-set=utf8
Datenbank
[client]
Tabelle default-character-set=utf8
-
31.
Client MySQL
(UTF-8)
Ü
C3 9C
Verbindung
(ISO-8859-1)
Ü
C3 9C Server
(UTF-8)
Ü
C3 83 C2 9C
-
32.
Resourcen
http://php.net/manual/de/
mbstring.overload.php
http://www.ibm.com/developerworks/library/
os-php-unicode/index.html
http://unicode.org
Google, Bing, Yahoo, .....
-
33.
Fragen?
\n
\n
\n
\n
ABC hat 26 Zeichen, sollte langen!\n
Kleinbuchstaben auch noch\n
Zahlen!\n
Satzzeichen auch noch?\n
Steuerzeichen f&#xFC;r Drucker etc.\n\nSch.... ganz sch&#xF6;n voll.\n\nUnd die Briten nerven weil es zwar ein Dollar-Zeichen, aber kein Pfund zeichen gibt. Und platzist auch nicht mehr.....\n
\n
Steuerzeichen f&#xFC;r Drucker etc.\n\nSch.... ganz sch&#xF6;n voll.\n\nUnd die Briten nerven weil es zwar ein Dollar-Zeichen, aber kein Pfund zeichen gibt. Und platzist auch nicht mehr.....\n
Steuerzeichen f&#xFC;r Drucker etc.\n\nSch.... ganz sch&#xF6;n voll.\n\nUnd die Briten nerven weil es zwar ein Dollar-Zeichen, aber kein Pfund zeichen gibt. Und platzist auch nicht mehr.....\n
Steuerzeichen f&#xFC;r Drucker etc.\n\nSch.... ganz sch&#xF6;n voll.\n\nUnd die Briten nerven weil es zwar ein Dollar-Zeichen, aber kein Pfund zeichen gibt. Und platzist auch nicht mehr.....\n
Steuerzeichen f&#xFC;r Drucker etc.\n\nSch.... ganz sch&#xF6;n voll.\n\nUnd die Briten nerven weil es zwar ein Dollar-Zeichen, aber kein Pfund zeichen gibt. Und platzist auch nicht mehr.....\n
Steuerzeichen f&#xFC;r Drucker etc.\n\nSch.... ganz sch&#xF6;n voll.\n\nUnd die Briten nerven weil es zwar ein Dollar-Zeichen, aber kein Pfund zeichen gibt. Und platzist auch nicht mehr.....\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n