Skip to content

Encoding

scheiEncoding.png


Daten im Speicher

  • Daten im Speicher können nur durch eine Reihe von Bits repräsentiert werden.
  • Beim Einlesen der Daten müssen diese Daten interpretiert werden.

DataInMemory.excalidraw.svg


Textrepräsentation

  • Damit wir eine Binärzeichenfolge als Text erkennen können, muss festgelegt werden, welche Abfolge von Bits welche Buchstaben bzw. Zeichen repräsentieren.
  • Wir brauchen also eine Zuordnung zwischen Bitfolgen und Zeichen.

DataInMemory2.excalidraw.svg


ASCII

  • Eine einfache (und schon etwas ältere) Möglichkeit der Binärfolgeninterpretation ist ASCII.
  • Es steht für American Standard Code for Information Interchange
  • ASCII enthält 128 Zeichen der englischen Sprache, sowie Steuer- und Sonderzeichen

USASCII_code_chart.png


ASCII (2)

  • Die ASCII Tabelle enthält 128 unterschiedliche Zeichen.
  • Ein einzelnes Zeichen kann durch eine Kombination aus 7 Bit dargestellt werden.
  • Früher wurde das achte Bit als Kontrollbit verwendet um zu überprüfen ob ein gültiges Zeichen gespeichert wurde.
    • Even Parity: Die Gesamtzahl der Einser muss gerade sein.
    • Odd Parity: Die Gesamtzahl der Einser muss ungerade sein.

ASCII (3)

  • ASCII ist auf die englische Sprache ausgelegt. Es kommen zum Beispiel keine Umlaute vor.
  • Es kommen folgende Zeichenarten vor:
    • Großbuchstaben (A, B, C, …)
    • Kleinbuchstaben (a, b, c, …)
    • Sonderzeichen (!, #, $, …)
    • Nicht darstellbare Zeichen (CR, LF, …)

Nicht darstellbare Zeichen

AsciiControlCharacters.png


Nicht darstellbare Zeichen (2)

  • Sie werden auch Steuerzeichen genannt.
  • Sie werden nicht auf dem Bildschirm ausgegeben.
  • Sie sind dafür gedacht bestimmten Geräten (zB Drucker, Bildschirm) Anweisungen zu senden.
  • Außerdem werden zB Zeilenumbrüche oder Einrückungen (Tab) mit diesen Zeichen dargestellt.

Windows vs. Unix

  • Bis zum heutigen Tag werden in Windows und Unix-basierten Betriebsystemen Zeilenumbrüche unterschiedlich kodiert.

  • Windows: CR LF

  • Unix: LF


Dateiendungen

Um zu Erkennen welche Daten in einer Datei auf dem Rechner gespeichert sind, werden (unter anderem) Dateiendungen verwendet.

  • .doc .docx
  • .txt .js
  • .jpeg .png
  • .exe

Dateiendungen helfen dem Betriebsystem zu erkennen, um welche Art von Datei es sich handelt, damit das richtige Programm dafür ausgewählt werden kann.


Magic Bytes

Viele Dateien haben zu Beginn der Datei eine spezielle Abfolge von Bytes, die (zusätzlich zur Dateiendung) kennzeichnen um welchen Inhalt es sich handelt.

Magic Bytes Liste


Magic Bytes (3)

Textdatein (.txt) können unterschiedliche Encodings verwenden, die durch die Magic Bytes gekennzeichnet werden.

Magic BytesBeschreibung
EF BB BFUTF-8 BOM
FF FEUTF-16LE
FE FFUTF-16BE
FF FE 00 00UTF-32LE
00 00 FE FFUTF-32BE

Wenn keine Magic Bytes angegeben sind wird meist UTF-8 angenommen.


Endianness

Wenn mehr als ein Byte zur Darstellung eines Zeichens verwendet wird (zB UTF-16), müssen wir entscheiden in welcher Reihenfolge die Bytes, die zur Darstellung eines Zeichens verwendet werden vorkommen.

Beispiel: 0x1234 soll gespeichert werden:

Byte Index01
Big-Endian1234
Little-Endian3412
  • Big Endian: Das wichtigste (most significant) Byte wird an der kleinsten Speicheradresse gespeichert (=vor den anderen). Also das Zeichen endet an der größeren Adresse (-> Big Endian)
  • Little Endian: Umgekehrt

BOM (Byte Order Mark)

  • Die Zeichenfolge FE FF in Magic Bytes wird auch Byte Order Mark genannt, da sie angibt in welcher Reihenfolge (Little Endian / Big Endian) die Zeichen kodiert sind.
  • FF FE steht für Little Endian
  • FE FF steht für Big Endian

Die Angabe einer BOM ist optional und wird von vielen Programmen nicht verwendet und auch nicht erwartet. Standardmäßig wird Big Endian angenommen.


Erweiterungen zu ASCII

  • ASCII in Reinform kommt heute kaum noch vor.
  • Viele Sprachen haben Sonderzeichen, die in der englischen Sprache nicht vorkommen.
  • Anforderung, neben Buchstaben auch andere Zeichen darzustellen steigt (zB Emojis)
  • Heute gebräuchliche Encodings sind unter anderem UTF-8, UTF-16 und ISO-8859-1

UTF-8

  • Steht für: Unicode Transformation Format - 8 bit
  • Mit UTF-8 wurde eine Erweiterung zu ASCII geschaffen die heute weit verbreitet ist.
  • Bei UTF-8 sind Zeichen variabel zwischen einem und vier Bytes lang.
  • Ein Zeichen wird auch Code Point genannt.
  • Die ersten 128 Code Points sind deckungsgleich mit dem ASCII Zeichensatz.

UTF-8 Variable Länge

First code pointLast code pointByte 1Byte 2Byte 3Byte 4
0x00x7F0xxxxxxx
0x800x07FF110xxxxx10xxxxxx
0x08000xFFFF1110xxxx10xxxxxx10xxxxxx
0x100000x10FFFF11110xxx10xxxxxx10xxxxxx10xxxxxx

Die x in der Tabelle werden mit dem Wert des jeweiligen Code Point ersetzt. Anhand des ersten Bytes kann erkannt werden wie viele Byte der Code Point braucht.


UTF-8 Enthaltene Zeichen

  • Die ersten 128 Code Points brauchen ein Zeichen. Sie entsprechen dem ASCII Zeichensatz.
  • Die nächsten 1.920 Code Points brauchen zwei Bytes und enthalten nahezu alle Zeichen der Latein-basierten Sprachen und Zeichensätze, inklusive Umlaute, Accents, Griechisch, Kyrillisch, Koptisch, Armenisch, Arabisch, Syrisch, phonetisches Alphabet, …
  • Drei Bytes werden benötigt für die verbleibenden 61.440 Code Points der BMP (Basic Multilingual Plane), u.a. Chinesisch, Japanisch und Koreanisch.
  • Vier Bytes werden verwendet für die 1.048.576 Code Points der anderen Bereiche, inklusive Emojis, weniger gebräuchliche chinesische Zeichen, historische Schriften und mathematische Symbole.