Wie funktioniert UTF-8 „mit variabler Breite Codierung“ Arbeit?
-
20-09-2019 - |
Frage
Der Unicode-Standard hat genug Code-Punkte darin, dass Sie 4 Bytes brauchen sie alle zu speichern. Das ist, was die UTF-32-Codierung der Fall ist. Doch die UTF-8-Codierung quetscht irgendwie diese in viel kleinere Räume, die durch etwas mit „variabler Breite Codierung“ bezeichnet.
In der Tat schafft es die ersten 127 Zeichen des US-ASCII zu repräsentieren in nur einem Byte, das genau wie echte ASCII aussieht, so dass Sie viele ascii Text interpretieren kann, als ob es UTF-8 waren, ohne etwas daran zu tun. Ordentlich Trick. Also, wie funktioniert es?
Ich werde meine eigene Frage hier stellen und zu beantworten, weil ich nur ein bisschen Lesen tat es, um herauszufinden, und ich dachte, es jemand anderes etwas Zeit sparen könnte. Und dazu vielleicht jemand kann mich korrigieren, wenn ich falsch etwas davon haben.
Lösung
Jedes Byte beginnt mit ein paar Bits, die Ihnen sagen, ob es ein einziges Byte-Code-Punkt ist, ein Multi-Byte-Code-Punkt oder eine Fortsetzung eines Multi-Byte-Codepunkt. Wie folgt aus:
0xxx xxxx A single-byte US-ASCII code (from the first 127 characters)
Die Multi-Byte-Code-Punkte jeden Start mit einem paar Bits, die im Wesentlichen sagen: „Hey, müssen Sie auch das nächste Byte gelesen (oder zwei oder drei), um herauszufinden, was ich bin.“ Sie sind:
110x xxxx One more byte follows
1110 xxxx Two more bytes follow
1111 0xxx Three more bytes follow
Schließlich werden die Bytes, die diese Startcodes alle wie folgt aussehen wie folgt vor:
10xx xxxx A continuation of one of the multi-byte characters
Da können Sie sagen, welche Art von Byte sind Sie bei Temperaturen von den ersten paar Bits suchen, dann auch wenn etwas verstümmelten irgendwo bekommt, verliert man nicht die ganze Sequenz.
Andere Tipps
RFC3629 - UTF-8, eine Transformation Format der ISO 10646 die letzte Instanz ist hier und alle Erklärungen hat.
Kurz gesagt, mehrere Bits in jedem Byte der UTF-8-kodierte 1-zu-4-Byte-Sequenz, die ein einzelnes Zeichen darstellt, werden verwendet, um anzuzeigen, ob es eine nachfolgende Byte, ein führendes Byte, und wenn ja, wie viele Bytes folgen. Die restlichen Bits enthalten die Nutzlast.
UTF-8 war ein anderes System zum Speichern Ihre Reihe von Unicode-Codepunkten, diese magischen U + Zahlen im Speicher Verwendung von 8-Bit-Bytes. In UTF-8, jeden Codepunkt von 0 bis 127 ist in einem gespeicherten Single-Byte. Nur Codepunkte 128 und über 2 gespeichert ist unter Verwendung von 3, in der Tat, bis zu 6 Bytes.