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

Unicode: Die Vielf�ltigkeit von Zeichen und Sym...

Unicode: Die Vielf�ltigkeit von Zeichen und Symbolen

Yanick Witschi

November 12, 2024
Tweet

More Decks by Yanick Witschi

Other Decks in Technology

Transcript

  1. Unsere heutige Reise • Eine kurze Frage in die Runde

    • Ein bisschen Computer-Geschichte • Was ist Encoding? • Unicode - Graphemes, Codepoints etc. • Unicode Encoding •
  2. Text im Computer? • Computer = Rechner • 👉 Computer

    können nur Zahlen • Strom/Kein Strom. Computer arbeiten mit 0 und 1 (noch) • 👉 Alles in einem Computer ist eine Binärfolge • 👉 Computer können kein Text. Text ist für uns
  3. Mapping-Tabelle • 1 = A • 2 = B •

    3 = C • … • 26 = Z • Control Codes: CR, LF, ESC, DEL, …
  4. Encoding • Vertrag darüber, welche Zahl welchem Zeichen entspricht •

    Nichts anderes als eine grosse Mapping-Tabelle • Klärt die Frage: «Wie übersetze ich ein Zeichen in Binärcode für den Computer?» • «Übersetzen» ➡ «encodieren» • «Zurückübersetzen» ➡ «decodieren»
  5. ASCII • Erste Ausgabe 1963 • De fi niert die

    «Mapping-Tabelle» von 128 Zeichen • Jedes Zeichen wird mit 1 Byte encodiert (7 Bit reichen) • Gross- zu Kleinschreibung ist 1 Bit-Shift • C = 67 = 0100 0011 • c = 99 = 0110 0011
  6. ASCII = Englisch • Deutsch: Ä, Ö, Ü, ä, ö,

    ü, ß • Chinesisch: > 100.000 Schriftzeichen • Devanagari • Arabisch • Kyrillisch • 💩❤ • Ägyptische Hieroglyphen, Germanische Runen, etc.
  7. Weitere Encodings • ISO 8859: • ISO 8859-1: Westeuropäische Sprachen

    • ISO 8859-5: Kyrillisches Alphabet • ISO 8859-7: Griechische Schrift • Windows-1252: Erweiterung von ISO 8859-1 mit weiteren Zeichen • EBCDIC (Extended Binary Coded Decimal Interchange Code) • Shift JIS (Shift Japanese Industrial Standard) • UTF-8, UTF-16, UTF-32
  8. ISO-8859-1 • Auch bekannt als Latin-1 • «Oh, wir haben

    ja noch Platz für zusätzliche Zeichen in einem Byte.» • Erste 128 Zeichen identisch mit ASCII • Natürliche Evolution von ASCII • Vor allem westeuropäische Sprachen: ä, ö, ü, ß, ñ, ¿, ¡, é, ê, ó, ø, …
  9. Ziel: Umfassendes «Mapping» String Dezimalwert Unicode ID ! 33 U+0021

    A 65 U+0041 © 169 U+00A9 € 8364 U+20AC 好 22 909 U+597D 💩 128 169 U+1F4A9
  10. (What's the Story) Morning Glory? • Anfänge in den 80ern

    • Version 1 im Oktober 1991 mit 7.161 Zeichen • Version 6 im Oktober 2010 mit Emojis und 109.242 Zeichen • Version 16 im September 2024 mit 154.998 Zeichen • Der aktuelle Codespace liegt zwischen U+0000 bis U+10FFFF
 Bietet also Platz für 1.114.111 Zeichen bzw. Codepoints
  11. Codepoint • ü = Lateinischer Kleinbuchstabe U mit Trema
 252

    • ü = Lateinischer Kleinbuchstabe U (u) +
 Kombinierendes Trema (⤆ „ )
 117 + 776 • 🏃 = Läufer (🏃) + Emoji-Modi fi kationszeichen Fitzpatrick- Typ 6 + Breitenloser Verbinder (ZWJ) + Zeichen für Frau (♀)
 127939 + 127999 + 8205 + 9792
  12. Unicode Blöcke • Dingbats: ★ oder ☑ • Miscellaneous Symbols:

    ♻ oder ☔ • Emoji: 😂 oder 💩 • Symbols and Pictographs: 🌌 oder 🛸 • Reservierte Private Use Area: • Tengwar, Klingonisch, Wingdings, Icon Fonts, …
  13. Recap: ASCII • H von «Hallo» • 72 • 01001000

    • Problem? 1 Byte reicht für 255 (2⁸ - 1) Codepoints, der aktuelle Unicode Codespace sieht aber Platz für 1.114.111 Codepoints vor
  14. Wie viele Bytes brauchen wir? • 2ⁿ - 1 •

    1 Byte = 28 - 1 = 255 • 2 Bytes = 216 - 1 = 65.535 • 3 Bytes = 224 - 1 = 16.777.215 • log₂(1.114.111 + 1) = 20,08 = 21 Bits
  15. UTF-32 • Jeder Codepoint bekommt 4 Bytes (32 Bit) •

    Gleicher Ansatz wie ASCII nur eben 4 statt 1 Byte • Wieso 4 Bytes wenn 3 reichen würden?
  16. UTF-32 String Codepoints UTF-32 H 72 00 00 00 48

    a 97 00 00 00 61 l 108 00 00 00 6C 🏃 127939
 127999
 8205
 9792 00 01 F3 C3
 00 01 F3 FF
 00 00 20 0D
 00 00 26 40

  17. 👍 Codepoints fi nden 00 01 F3 C3 00 01

    F3 FF 00 00 20 0D 00 00 26 40 🏃
  18. 👎 Speicherverbrauch Hello world! 48 65 6C 6C 6F 20

    77 6F 72 6C 64 21 00 00 00 48 00 00 00 65 00 00 00 6C 00 00 00 6C 00 00 00 6F 00 00 00 20 00 00 00 77 00 00 00 6F 00 00 00 72 00 00 00 6C 00 00 00 64 00 00 00 21 ASCII UTF-32
  19. UTF-8 • Jeder Codepoint bekommt zwischen 1 und 4 Bytes

    • Kompatibel mit ASCII für Codepoints aus dem ASCII- Mapping
  20. 👍 Speicherverbrauch Hello world! 48 65 6C 6C 6F 20

    77 6F 72 6C 64 21 48 65 6C 6C 6F 20 77 6F 72 6C 64 21 ASCII UTF-8
  21. 👎 Codepoints fi nden C2 A1 48 65 6A F0

    9F 8F 83 F0 9F 8F BF E2 80 8D E2 99 80 ¡Hej🏃
  22. ??? • UTF-8 braucht also zwischen 1 und 4 Bytes

    pro Codepoint. Aber warum 4 Bytes? • Wir haben doch gesehen, dass 21 Bit genug wären? • Wie weiss ein Parser, wann ein Codepoint anfängt und wann er aufhört? Also ob er jetzt bspw. 1 Byte oder 4 Bytes lesen soll?
  23. UTF-8 Binärlogik • Codepoint braucht 1 Byte (wie bei ASCII):

    • Führendes Byte startet mit 0xxxxxxx • Codepoint braucht 2 Bytes • Führendes Byte startet mit 110xxxxx • Das 2. Byte startet immer mit 10xxxxxx • Codepoint braucht 3 Bytes • Führendes Byte startet mit 1110xxxx • Die Bytes 2 und 3 starten mit 10xxxxxx • Codepoint braucht 4 Bytes • Führendes Byte startet mit 11110xxx • Die Bytes 2, 3 und 4 starten mit 10xxxxxx
  24. Also bevorteilt Unicode uns? • Ja, Graphemes aus dem Westen

    nutzen weniger Codepoints und tiefere Zahlen, daher brauchen wir weniger Daten! • Aber: ASCII: 94.8%
  25. • «Vielfältigkeit» encoded als UTF-8 • 56 69 65 6C

    66 C3 A4 6C 74 69 67 6B 65 69 74 • «Vielfältigkeit» encoded als ISO-8859-1 • 56 69 65 6C 66 E4 6C 74 69 67 6B 65 69 74 • Vielf ltigkeit E4 = 11100100 6C = 01101100