5. UTF-8
Werden Unicode-Zeichen ins binäre übersetzt wird klar, dass diese Zahlen nicht mehr nur mit einem Byte dargestellt werden können. Beispielsweise ist dem Affen-Emoji 🐒 die Zahl zugewiesen, was der Binärzahl entspricht, also 3
Bytes Speicherplatz benötigt.
- 1 Byte
- entspricht Bit
- 1 Megabit
- entspricht Bit
- 1 Megabyte
- entspricht Bytes oder Bit
- UTF-8
- ist ein Code, der Unicode-Zeichen in Bitmuster übersetzt. Ein Unicode-Zeichen wird mit ein bis vier Bytes (daher 8-32 bit) dargestellt. Die folgende Tabelle zeigt, wie die Codierung funktioniert:
Unicode-Bereich | Bitmuster | Anzahl Bit | Byte 1: Anzahl Kontroll-Bits |
---|---|---|---|
0 bis 127 | 0xxxxxxx | 7 | 1 |
128 bis 2047 | 110xxxxx 10xxxxxx | 11 | 3 |
2048 bis 65535 | 1110xxxx 10xxxxxx 10xxxxxx | 16 | 4 |
ab 65536 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | 21 | 5 |
Unicode-Zeichen mit einer Nummer zwischen 0 und 127 werden mit einem Byte dargestellt, welches mit 0
beginnt. Somit ist UTF-8 in diesem Bereich identisch mit ASCII (und Latin 1).
Für die anderen Zeichen wird mehr als ein Byte verwendet. Dabei beginnt jedes Byte mit einer oder mehreren 1
, gefolgt von einer 0
. Die Anzahl 1
im ersten Byte definieren, wie viele Bytes für das Zeichen verwendet werden. Die folgenden Bytes werden mit 10
markiert. Die x
werden mit der Binärdarstellung der Unicode-Nummer aufgefüllt.
Zeichen | Nummer | Bitmuster |
---|---|---|
A | 65 | 01000001 |
ä | 228 | 11000011 10100100 |
Schwarze Sonne mit Strahlen ☀ | 9728 | 11100010 10011000 10000000 |
Affe 🐒 | 128018 | 11110000 10011111 10010000 10010010 |
Der Vorteil dieser Codierung ist, dass anhand der ersten Bits eines Bytes erkannt wird, ob es sich um den Anfang oder die Fortsetzung eines Zeichens handelt.
Beginn | Bedeutung |
---|---|
0… | ASCII-Zeichen |
10… | Fortsetzung eines Zeichens mit mehreren Bytes |
110… | Beginn eines Zeichens mit zwei Bytes |
1110… | Beginn eines Zeichens mit drei Bytes |
11110… | Beginn eines Zeichens mit vier Bytes |
Dies wird noch deutlicher, wenn man dies als Binärbaum darstellt:
Ausprobieren
Bin Decoder
Modus
Chr | Dec | Bin |
---|
Codieren Sie Ihre zwei lieblings Emojis als UTF-8 Binär-Kette mit folgendem Vorgehen:
- Verwenden Sie für das Herausfinden der binären Codierung die Hilfe von Python. (Im Beispiel für den Stern:
10101101010000
) - Codieren Sie die Binärzahl zu UTF-8 und halten Sie das Resultat unten fest.
- Probieren Sie mit dem obigem Decoder aus, ob das Emoji korrekt versendet wird.
- Markieren Sie die Aufgabe als erledigt.
emoji = '⭐'
dec_emoji = ord(emoji) # Unicode Nummer als Dezimalzahl
bin_emoji = bin(dec_emoji)[2:] # Unicode Nummer als Binärzahl
print(f'Zahl: {dec_emoji}, Binär: {bin_emoji}')
Mehrstufige Codierung 1
Oft werden Informationen mehrstufig codiert. So wird beispielsweise die Information «Ich bin müde.» als Emoji dargestellt. Das Handy ordnet dem Emoji die entsprechende Unicode-Nummer zu. Diese wird mit UTF-8 in eine Bitfolge übersetzt, welche über das Mobilfunknetz übermittelt wird.
Das Handy des Empfängers übersetzt die Bitfolge wieder zurück in eine Unicode-Nummer und das entsprechende Emoji. Die Interpretation des Emojis muss vom Empfänger selbst vorgenommen werden.
Footnotes
-
Remix 👉 rothe.io ↩