# UTF 8 decodieren



## konoha (1. Nov 2015)

Habe hier mehrere 8 bit Binärblöcke vor mir liegen und die Aufgabe ist es :

Decodieren Sie folgenden binären UTF-8 Code:

11000011  10011100  01100010  01110101  01101110  01100111  00100000  01100111  01100101 01101100  11000011  10110110  01110011  01110100  00100001

Wie geht bitte die Umrechnung?

Sobald ich mir die Tabelle ansehe http://unicode-table.com/de/#control-character,

habe ich keinen blassen Schimmer wie ich auf die Zahlenspalte kommen soll?
Also beispielsweise:
0090
00E0
01C0

Die Zeile oben hingegen scheint ja offensichtlich Hexadezimal zu sein. Wenn ich die Blöcke jeweils in Hexadezimal umrechne.

Wie komme ich aber auf die Spalte?


----------



## Thallius (1. Nov 2015)

Das ist binär. Wie die Aufgabe schon sagt. Wie man binär in hexadezimal umrechnet solltet ihr also eigentlich wissen.


----------



## konoha (1. Nov 2015)

Was aber genau ist bitte das hier?


0090
00E0
01C0


Wie komme ich auf diese Zahlen?


----------



## Flown (1. Nov 2015)

Du solltest hier mal die Kodierung nochmal nachlesen: WIKI

PS: Das sind Hex-Zahlen.


----------



## konoha (1. Nov 2015)

Wenn ich den ersten binärblock in hex umrechnen erhalte ich

11000011 = C3

Und wie komme ich nun mit der c3 bitte beispielsweise auf die 01C0?


----------



## stg (1. Nov 2015)

Deine Tabelle ist für Unicode-Zeichen, du hast die Zeichen aber UTF-8 kodiert. 
Schnapp dir eine passende Übersetzungs-Tabelle und dann kann's los gehen.

11000011 ist in HEX C3, das ist schon mal richtig. 0xC3 allein repräsentiert aber noch kein Zeichen, sondern nur einen "Zeichen-Block" zusammen mit den nächsten 8bit wird daraus
0xC3 0x9C 
das entspricht dem Unicode-Zeichen U+00DC aus deiner Tabelle (ist aber eigentlich irrelevant)
beziehungsweise ganz einfach dem Buchstaben *Ü*


----------



## konoha (1. Nov 2015)

@stg
Vielen dank für die Erklärung. Das hilft mir sehr weiter!
Nichts desto trotz liegen mir ungereimheiten vor. Was bedeutet denn bitte die 0x vor dem C3 bzw. vor der 9C?
Die Wiki Seite stiftet leider nur noch mehr Verwirrung. 

Wie würde es denn aussehen wenn ich die 2 8bitblöcke in utf32 dekodieren müsste?


----------



## stg (1. Nov 2015)

UTF-32 Zeichen sind in 32 bit kodiert, nicht in 8 bit und auch nicht in 2 mal 8 bit ... da fehlen dann immer noch 16 bit. Die Frage ist also schon fehlerhaft.

Das 0x ist nur eine übliche Notation dafür, dass eine HEX-Zahl folgt.


----------



## konoha (1. Nov 2015)

Also ich habe für die daraufolgenden 16 bits:

0x62 und 0x75
Und bei den ersten 16bits waren es ja 0xC3 und 0xC9.

Ich kann keine UTF-32 tabelle im netz finden? Bei der UTF 8 Tabelle wars kein Problem. Aber wieso gibt es bitte keine Tabelle zu UTF-32?


----------



## stg (1. Nov 2015)

Wozu brauchst du denn eine UTF-32 Tabelle? Dein Text ist doch UTF-8 kodiert!

Eine vollständige UTF-32 Tabelle findest du zum Beispiel hier:
http://www.fileformat.info/info/charset/UTF-32/list.htm
Um alle Zeichen durchzuschauen musst du aber ein bisschen blättern  ... mit 32 bit kannst du schließlich ca 4 Mrd. Zeichen kodieren.


----------



## konoha (1. Nov 2015)

Da ich dank deiner hilfe nun das prinzip der dekodierung in utf8 verstanden habe, wollte ich zu der naechsten teilaufgabe übergehen:

Eine Teilaufgabe (siehe screenshot). Den ich nicht ganz verstehe. Deswegen wollte ich das mit utf 32 wissen.

Da steht naemlich "Drücken Sie diesen Text UTF-32-kodiert in Hexadezimaldarstellung aus"

Was genau heisst das? Heisst das das ich den binaercode in utf 32 umschreiben muss und anschließend es in hexadezimal umrechnen muss?


----------



## stg (1. Nov 2015)

Nein, damit ist nun gemeint, dass du den zuvor entschlüsselten Text nun UTF-32 kodieren sollst.

Also: 11000011 10011100 haben wir entschlüsselt zu *Ü*
Kodieren wir das *Ü *nun UTF-32 wird daraus: 0x000000DC

Siehe z.B. hier: http://www.fileformat.info/info/unicode/char/dc/index.htm

Ich find's übrigens echt klasse, dass ihr UTF-8 ent- bzw UTF-32 ver-schlüsseln sollt, man euch aber eine Unicode-Tabelle in die Hand drückt. Damit ist die Aufgabe nicht lösbar ... schau dich lieber auf der von mir verlinkten Seite *fileformat.info *um. 

Wie ist denn nun eigentlich deine Lösung zu Teil a) ?


----------



## konoha (1. Nov 2015)

Gut das du mich nochmal wegen der Teilaufgabe a ansprichst: Leider habe ich doch noch meine Schwierigkeiten sie zu lösen zumal ich jetzt bei der utf8 tabelle keine utf8hex stelle finde für die 0x62 und 0x75(16bit). (

Was mache ich bitte falsch?


----------



## stg (1. Nov 2015)

Auf fileformat.info hast du eine Suchbox. Gib da doch einfach mal 0x62 ein und schaue, was passiert.... 

Zu UTF-8: Hier werden 8bit-Blöcke für die Verschlüsselung verwendet. Das heißt aber nicht, dass immer 8bit genau ein Zeichen repräsentieren, denn damit könnte man dann nur insgesamt 256 (also 2 hoch 8) verschiedene Zeichen kodieren. Für die häufigsten Zeichen macht man das, aber für weniger häufigere Zeichen verwendet man zwei 8bit-Blöcke, für noch seltenere Zeichen verwendet man drei oder sogar vier aufeinander folgende 8bit-Blöcke. 
Siehe dazu z.B. hier: http://www.fileformat.info/info/unicode/utf8.htm

Übrigens: Es gibt keinen Grund dazu die Binärzahlen zuerst in HEX-Zahlen umzurechnen. 

Um das vielleicht noch einmal zu verdeutlichen: Bei der Aufgabe geht es in keinster Weise darum irgendetwas nachzurechnen. Du musst einfach nur anhand einer Übersetzungstabelle den Text dekodieren bzw später wieder (anhand einer anderen Tabelle) kodieren.
Die HEX-Darstellung des UTF-xxx Codes dient einfach nur dazu, den Code etwas "lesbarer" zu gestalten.


----------



## konoha (2. Nov 2015)

Vielen dank für die vielen Worte! Ich habe jetzt endlich den UTF-8 code dekodiert.

Ich habe mir auch zu jedem "Buchstaben, Zeichen" den ich in auf der Seite erfassen konnte sämtliche UTF-32(hex) wie z.B (0x00000020) (20) notiert.

Was genau muss ich jetzt machen im Bezug auf Teilaufgabe b, da du geschrieben hast, dass ich nach dem Dekodieren der UTF-8 nun eine weitere Tabelle hinzuziehen muss?


----------



## stg (2. Nov 2015)

Wenn du zu jedem "Zeichen" den UTF-32 Code schon hast, dann bist du fertig. Du kannst gerne deine Lösungen zu a) und b) posten, dann kann ich dir sagen, ob das soweit alles richtig ist


----------



## Flown (2. Nov 2015)

Einmal zum ersten Buchstaben:
11000011  10011100 (C39C) -> rot markiert ist die UTF-8 Darstellung, dass 2 Byte verwendet wurden, um einen Buchstaben zu kodieren -> in der Tabelle nachsehen -> Ü

Ü -> in UTF-8 (siehe oben) -> Kodierungszeichen (rote Zahlen) weglassen, dann erhälst du ->  000 1101 1100 (DC) -> 0x000000DC -> UTF-32(hex)


----------



## Null-Checker90 (2. Nov 2015)

Haha... sind scheinbar im selben Kurs 
Hänge auch an der Aufgabe -.-`
Aber das hilft mir hier leider auch nicht weiter... Hat ja auch nichts mit der Tabelle zu tun die der Prof uns gegeben hat...


----------



## konoha (3. Nov 2015)

@Null-Checker90 
Hab dir eine pm geschickt.

Vielen dank an euch beiden flown und besonders stg!
Haette im nachhinein die Tabelle gar nicht gebraucht um utf32-hex zu bestimmen. 

Also was die Lösung betrifft zu UTF-8, die liefert schon einen sinvollen kurz und knackigen (Satz). 
Von daher denke ich ist es nicht nötig sie noch begutachten zu lassen. Vielen Dank nochmal! War meinerseits sehr Aufschlussreich!!


----------

