faecher:informatik:oberstufe:codierung:utf8:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
faecher:informatik:oberstufe:codierung:utf8:start [13.10.2021 17:02] – [Beispiele:] sbelfaecher:informatik:oberstufe:codierung:utf8:start [21.09.2022 19:37] – [Beispiele:] sbel
Zeile 49: Zeile 49:
  
   * Ist die Binärdarstellung des Unicode-Codes nicht länger als ein Byte und das das erste Bit eine 0, werden die restlichen 7 Bit gemäß des ASCII Codes verwendet, die 128 verbleibenden Möglichkeiten entsprechen also genau dem ASCII-Code.   * Ist die Binärdarstellung des Unicode-Codes nicht länger als ein Byte und das das erste Bit eine 0, werden die restlichen 7 Bit gemäß des ASCII Codes verwendet, die 128 verbleibenden Möglichkeiten entsprechen also genau dem ASCII-Code.
-  * Ist die Binärdarstellung des Unicode-Codes länger als ein Byte oder der Code ist ein Byte lang und beginnt mit einer ''1'' geht man wie folgt vor: Der Unicode-Code wird in 6 Bit lange Teile aufgeteilt. Für jedes dieser 6 Bit Pakete wird ein Byte zur Darstellung verwendet, jedes Byte beginnt mit '10'. Das erste Byte beginnt mit einer '1' für jedes Byte, das verwedndet wird. Benötihgt man also 3 Byte, um ein Zeichen in UTF-8 darzustellen, beginnt das erste Byte mit '111'.+  * Ist die Binärdarstellung des Unicode-Codes länger als ein Byte oder der Code ist ein Byte lang und beginnt mit einer ''1'' geht man wie folgt vor: Der Unicode-Code wird in 6 Bit lange Teile aufgeteilt. Für jedes dieser 6 Bit Pakete wird ein Byte zur Darstellung verwendet, jedes Byte beginnt mit '10'. Das erste Byte beginnt mit einer '1' für jedes Byte, das verwendet wird. Benötigt man also 3 Byte, um ein Zeichen in UTF-8 darzustellen, beginnt das erste Byte mit '111'Bevor die Nutzdaten beginnen, muss noch eine Null eingefügt werden ((Warum?))
  
 ==== Beispiele: ==== ==== Beispiele: ====
Zeile 57: Zeile 57:
 ''y = 79<sub>16</sub> = 0111 100<sub>2</sub>'' ''y = 79<sub>16</sub> = 0111 100<sub>2</sub>''
  
-Beginnt mit einer Null und ist nicht länger als ein Byte -> die letzen 7Bit werden verwendet, um zu codieren, also ein "ASCII k" in UTF-8 +Beginnt mit einer Null und ist nicht länger als ein Byte -> die letzten 7Bit werden verwendet, um zu codieren, also ein "ASCII k" in UTF-8 
  
 **UTF-8: 0110 1011** **UTF-8: 0110 1011**
Zeile 77: Zeile 77:
 **(3)** **(3)**
  
-乔 → U+4E50 → 4E5016 → 0100 1110 0101 0002  +{{:faecher:informatik:oberstufe:codierung:utf8:cs.png?160|}} 
- 16 Bit Daten zu codieren, dafür braucht man 3 Byte ( 3 x 6 = 18) + 
- Der UTF-8 Code beginnt also mit der Startsequenz 111 +''乐 -> U+4E50 -> 4E50<sub>16</sub> -> 0100 1110 0101 0000<sub>2</sub>'' 
- Dann von hinten 6 Bit → 01 000 , das Byte beginnt mit 10 (Regel) → 1001 000 + 
- Die nächsten 6 Bit → 1110 01 → 1011 1001 +  16 Bit Daten zu codieren, dafür braucht man 3 Byte ( 3 x 6 = 18) 
-       → Die fehlenden 4 Bit → 0100 mit Padding + Startsequenz → 1110 0100 +  Der UTF-8 Code beginnt also mit der Startsequenz ''1110'' 
- UTF-8 Codiert 1110 0100 1011 1001 1001 000 (Nutzdaten grün)+  Dann von rechts beginnend 6 Bit (01 000), das Byte beginnt mit 10 (Regel) also ist das dritte Byte ''1001 1000'' 
 +  Die nächsten 6 Bit analog:  ''1110 01'' -> ''1011 1001'' 
 +  Die fehlenden 4 Bit ''0100'' mit Padding + Startsequenz (''111'')ergeben das erste Byte ''1110 0100'' 
 + 
 +Die UTF-8 Codierung des Unicode-Zeichens 乔 ist also 3 Byte lang und sieht so aus ''1110 0100 1011 1001 1001 0000'' 
 + 
 +---- 
 +{{:aufgabe.png?nolink  |}} 
 +=== (A3) === 
 + 
 +Wandle die nachfolgenden Zeichen des Unicode Zeichensatzen in die UTF-8-Codierung um. Der Hexadezimalcode des Unicode Zeichens ist jeweils angegeben. 
 + 
 +Gehe jeweils wie in den Beispielen oben vor. Markiere die "Nutzdaten" die das eigentlich Unicode-Zeichen "transportieren"
 + 
 +  - ''I=49<sub>16</sub>'' 
 +  - ''Ö=D6<sub>16</sub>'' 
 +  - ''弈=5F08<sub>16</sub>'' 
 +  - ''😊=1F60A<sub>16</sub>'' 
 + 
 +----  
 + 
 +++++ Lösung 1 | 
 +0**1001001**, ein Byte, erstes Bit 0. 
 +++++ 
 +++++ Lösung 2 | 
 +110**00011** 10**010110** 
 +++++ 
 +++++ Lösung 3 | 
 +1110**0101** 10**111100** 10**001000** 
 +++++ 
 +++++ Lösung 4 | 
 +1111**0000** 10**011111** 10**011000** 10**001010** 
 +++++ 
 + 
 + 
 +---- 
 +{{:aufgabe.png?nolink  |}} 
 +=== (A4=== 
 + 
 +Wie viele unterschiedliche Unicode-Zeichen lassen sich theoretisch mit 1 Byte, 2 Bytes, 3 Bytes und 4 Bytes unter Beachtung der UTF-8-Regeln darstellen? 
 + 
 +++++ Lösung | 
 +  * 1 Byte: 7 nutzbare Bits -> 2<sup>7</sup> = 128 Zeichen 
 +  * 2 Bytes: 5+6 = 11 nutzbare Bits -> 2<sup>11</sup> = 2 048 Zeichen 
 +  * 3 Bytes: 4+6+6 = 16 nutzbare Bits ->  2<sup>16</sup> = 65 536 Zeichen 
 +  * 4 Bytes: 3+6+6+6 = 21 nutzbare Bits ->  2<sup>21</sup> = 2 097 152 Zeichen 
 +++++ 
 + 
 +==== Material ==== 
 + 
 +{{simplefilelist>.:*}} 
  
  
 ---- ----
 //CC-BY-SA Frank Schiebel, mit Material von Kimmig, ZPG Informatik BW// //CC-BY-SA Frank Schiebel, mit Material von Kimmig, ZPG Informatik BW//