Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Schei� encoding

Schei� encoding

Challenges using encodings ;)

Andreas Heigl

October 21, 2011
Tweet

More Decks by Andreas Heigl

Other Decks in Programming

Transcript

  1. ASCII 0 1 2 3 4 5 6 7 8

    9 A B C D E F 0 1 2 3 4 5 6 7 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Samstag, 23. Juli 16
  2. ASCII 0 1 2 3 4 5 6 7 8

    9 A B C D E F 0 1 2 3 4 5 6 7 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z Samstag, 23. Juli 16
  3. ASCII 0 1 2 3 4 5 6 7 8

    9 A B C D E F 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z Samstag, 23. Juli 16
  4. ASCII 0 1 2 3 4 5 6 7 8

    9 A B C D E F 0 1 2 3 4 5 6 7 ! ” # $ % & ’ ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ . Samstag, 23. Juli 16
  5. ASCII 0 1 2 3 4 5 6 7 8

    9 A B C D E F 0 1 2 3 4 5 6 7 ! ” # $ % & ’ ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ . Samstag, 23. Juli 16
  6. -1 Latin-1, Westeuropa -2 Latin-2, Mitteleuropa -3 Latin-3, Südeuropa -4

    Latin-4, Nordeuropa -5 Kyrillisch -6 Arabisch -7 Griechisch -8 Hebräisch -9 Latin-5, Türkisch -10 Latin-6, Nordisch -11 Thai -12 - nicht existent -13 Latin-7, Baltisch -14 Latin-8, Keltisch -15 Latin-9, Westeuropäisch -16 Latin-10, Südosteuropäisch Samstag, 23. Juli 16
  7. ISO-8859 -1 Latin-1, Westeuropa -2 Latin-2, Mitteleuropa -3 Latin-3, Südeuropa

    -4 Latin-4, Nordeuropa -5 Kyrillisch -6 Arabisch -7 Griechisch -8 Hebräisch -9 Latin-5, Türkisch -10 Latin-6, Nordisch -11 Thai -12 - nicht existent -13 Latin-7, Baltisch -14 Latin-8, Keltisch -15 Latin-9, Westeuropäisch -16 Latin-10, Südosteuropäisch Samstag, 23. Juli 16
  8. ASCII 0 1 2 3 4 5 6 7 8

    9 A B C D E F 0 1 2 3 4 5 6 7 ! ” # $ % & ’ ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ . Samstag, 23. Juli 16
  9. 0 1 2 3 4 5 6 7 8 9

    A B C D E F 8 9 A B C D E F nbsp ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ shy ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ ISO-8859-1 Samstag, 23. Juli 16
  10. 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, .... ) Samstag, 23. Juli 16
  11. Unicode U+0000 - U+10FFFF U+0000 - U+007F -> ASCII U+0080

    - U+00FF -> ISO-8859-1 Verschiedene Codierungen möglich Samstag, 23. Juli 16
  12. 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 Samstag, 23. Juli 16
  13. 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 Samstag, 23. Juli 16
  14. 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 Samstag, 23. Juli 16
  15. 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 Samstag, 23. Juli 16
  16. UTF-8 UTF-8 Binär Unicode Fehler y 0x79 01111001 U+0079 01111001

    ä 0xC3 0xA4 11000011 10100100 U+00E4 11100100 ä Samstag, 23. Juli 16
  17. 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 ä) Samstag, 23. Juli 16
  18. 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 Samstag, 23. Juli 16
  19. 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 Samstag, 23. Juli 16
  20. 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); Samstag, 23. Juli 16
  21. MySQL Client (UTF-8) Ü C3 9C Verbindung (ISO-8859-1) Ãœ C3

    9C Server (UTF-8) Ü C3 83 C2 9C Samstag, 23. Juli 16