Codierung der variablen Breite

A Codierung der variablen Breite ist eine Art von Art von Zeichenkodierung Schema, in dem Codes unterschiedlicher Längen verwendet werden, um a zu codieren Zeichensatz (ein Repertoire von Symbolen) zur Darstellung, normalerweise in a Computer.[1][a] Die häufigsten Codierungen der variablen Breite sind Multibyte -Kodierungen, die unterschiedliche Anzahl von verwenden Bytes (Oktetten), um verschiedene Zeichen zu codieren. (Einige Autoren, insbesondere in der Microsoft -Dokumentation, verwenden den Begriff Multibyte -Charakter -Set, die ein Fehlbezeichnung, weil die Darstellungsgröße ein Attribut der Codierung ist, nicht des Zeichenssatzes.)

Frühe Codth -Codierungen mit weniger als einem Byte pro Zeichen wurden manchmal verwendet, um englische Text in weniger Bytes in zu packen Abenteuerspiele für früh Mikrocomputer. Jedoch Scheiben (Im Gegensatz zu Bändern erlaubten zufälligen Zugriffs, sodass Text auf Bedarf geladen werden konnte), erhöht sich im Computerspeicher und des Allgemeinen Zwecks Kompressionsalgorithmen haben solche Tricks weitgehend veraltet.

Multibyte -Codierungen sind normalerweise das Ergebnis einer Notwendigkeit, die Anzahl der Zeichen zu erhöhen, die ohne Brechen codiert werden können Rückwärtskompatibilität mit einer bestehenden Einschränkung. Zum Beispiel kann man mit einem Byte (8 Bit) pro Zeichen 256 mögliche Zeichen codieren; Um mehr als 256 Zeichen zu codieren, wäre die offensichtliche Wahl, zwei oder mehr Bytes pro Codierungseinheit zu verwenden, zwei Bytes (16 Bit) würden 65.536 mögliche Zeichen zulassen, aber eine solche Änderung würde die Kompatibilität mit vorhandenen Systemen durchbrechen und möglicherweise nicht überhaupt machbar sein.[b]

Allgemeine Struktur

Da das Ziel eines Multibyte-Codierungssystems darin besteht, Änderungen an vorhandener Anwendungssoftware zu minimieren, müssen einige Zeichen ihre bereits bestehenden Einzeleinheiten-Codes beibehalten, auch wenn andere Zeichen mehrere Einheiten in ihren Codes haben. Das Ergebnis ist, dass es drei Arten von Einheiten in einer Codierung der variablen Breite gibt: Singletons, was aus einer einzelnen Einheit besteht, Lead -Einheiten, die in einer Multiunit -Sequenz an erster Stelle stehen, und Trail -Einheiten, die danach in einer Multiunit -Sequenz kommen. Input- und Display -Software muss offensichtlich über die Struktur des Multibyte -Codierungsschemas informiert werden, aber andere Software muss im Allgemeinen nicht wissen, ob ein Paar Bytes zwei separate Zeichen oder nur einen Charakter darstellt.

Zum Beispiel die vier Zeichenzeichenfolge "Ich ♥ ny"ist codiert in UTF-8 so wie dieses (gezeigt als hexadezimal Bytewerte): 49 E2 99 A5 4e 59. Der sechs Einheiten in dieser Sequenz, 49, 4e, und 59 sind Singletons (für IN, und Y), E2 ist eine Lead -Einheit und 99 und A5 sind Traileinheiten. Das Herzsymbol wird durch die Kombination der Bleieinheit und der beiden Wandereinheiten dargestellt.

UTF-8 erleichtert es einem Programm, die drei Arten von Einheiten zu identifizieren, da sie in separate Wertebereichen fallen. Ältere Kodierungen der variablen Breite sind in der Regel nicht so gut gestaltet, da sich die Bereiche überschneiden können. Eine Textverarbeitungsanwendung, die sich mit der Codierung der Variablenbreite befasst, muss dann den Text vom Beginn aller definitiven Sequenzen scannen, um die verschiedenen Einheiten zu identifizieren und den Text korrekt zu interpretieren. In solchen Codierungen kann man bei der Suche nach einer Zeichenfolge in der Mitte des Textes falsch positive positive Ergebnisse begegnen. Wenn beispielsweise die Hexadezimalwerte de, df, e0 und e1 entweder Lead-Einheiten oder Trail-Einheiten sein können, kann eine Suche nach der Zwei-Einheiten-Sequenz df e0 ein falsch positiv besteht aus zwei aufeinanderfolgenden Zwei-Einheiten-Sequenzen. Es besteht auch die Gefahr, dass eine einzelne beschädigte oder verlorene Einheit die gesamte Interpretation eines großen Laufs von Multiunit -Sequenzen falsch machen kann. In einer variablen Breitencodierung, bei der alle drei Arten von Einheiten disjunktion sind, funktioniert die Suchen von String immer ohne falsch positive Ergebnisse und (vorausgesetzt, der Decoder ist gut geschrieben) ist die Korruption oder der Verlust einer Einheit nur ein Zeichen verfälscht.

CJK -Multibyte -Codierungen

Die erste Verwendung von Multibyte -Kodierungen war für die Kodierung von Chinesen, Japanisch und Koreanisch, die große Charaktere aufweisen, die über 256 Zeichen liegt. Zunächst wurde die Codierung auf die Grenze von 7 Bit beschränkt. Das ISO-2022-JP-, ISO-2022-CN- und ISO-2022-KR-Kodierungen verwendete den Bereich 21–7e (hexadezimal) für Bleieinheiten und Trail-Einheiten und markierte sie von den Singletons mit ISO 2022 Escape-Sequenzen, um zwischen Single-Byte- und Multibyte-Modus zu wechseln. Insgesamt könnten 8.836 (94 × 94) Zeichen zunächst codiert werden und weitere Sätze von 94 × 94 Zeichen mit dem Schalten. Die ISO 2022 -Codierungsschemata für CJK werden im Internet noch verwendet. Die staatliche Natur dieser Codierungen und die große Überlappung machen sie sehr unangenehm zu verarbeiten.

An Unix Plattformen, die ISO 2022 7-Bit-Codierungen wurden durch einen Satz von 8-Bit-Codierungsschemata, dem erweiterten Unix-Code: EUC-JP, EUC-CN und EUC-KR ersetzt. Anstatt zwischen den Multiunit -Sequenzen und den Singletons mit Fluchtsequenzen zu unterscheiden, was die kodulierten, multiunitischen Sequenzen durch das bedeutendste Bit -Set markiert hat, dh im Bereich 80 - FF (hexadezimal), während die Singletons waren allein im Bereich 00–7f allein. Die Lead -Einheiten und Trail -Einheiten befanden sich im Bereich A1 bis Fe (hexadezimal), dh der gleichen wie ihre Reichweite in den ISO 2022 -Codierungen, aber mit dem hohen Bit auf 1. waren diese Kodierungen einigermaßen einfach zu arbeiten. Ihre Grenzwerte waren ASCII Charaktere und Sie haben es vermieden, Strings zu festen Längen zu verkürzen, aber eine Pause in der Mitte eines Multibyte -Charakters könnte immer noch zu schwerwiegenden Korruption führen.

Am PC (DOS und Microsoft Windows Plattformen. Shift-Jis und Die großen 5 beziehungsweise. In Shift-JIS hatten Bleieinheiten den Bereich 81–9F und E0-FC, Trail-Einheiten den Bereich 40–7e und 80-FC und Singletons hatten die Reichweite von 21–7e und A1-DF. In Big5 hatten Lead -Einheiten die Reichweite A1 -FE, Trail -Einheiten den Bereich 40–7e und A1 -FE und Singletons den Bereich 21–7e (alle Werte in Hexadezimal). Diese Überschneidung machte erneut die Verarbeitung schwierig, obwohl zumindest die meisten Symbole eindeutige Byte -Werte hatten (obwohl der Rückstand seltsamerweise nicht).

Unicode variable Breitencodierungen

Das Unicode Standard hat zwei Codierungen für variable Breite: UTF-8 und UTF-16 (Es hat auch eine Kodierung der festen Breite, UTF-32). Ursprünglich sowohl der Unicode als auch sowohl der Unicode als auch ISO 10646 Die Standards sollten eine feste Breite sein, wobei Unicode 16-Bit und ISO 10646 32-Bit waren. ISO 10646 lieferte eine variable Breitencodierung genannt UTF-1, in dem Singletons die Reichweite 00–9f hatten, leitete die Reichweite A0 - FF und Trail die Bereiche A0 -FF und 21–7e. Aufgrund dieses schlechten Designs ähnlich wie Schicht jis und Die großen 5 In seiner Überlappung der Werte die Erfinder der Plan 9 Das Betriebssystem, das erste, das Unicode durchgehend implementiert, hat es aufgegeben und durch eine viel besser gestaltete variable Breite für Unicode ersetzt: UTF-8, bei dem Singletons die Reichweite 00–7f haben, haben Bleieinheiten den Bereich C0-FD (FD (FD Jetzt tatsächlich C2-F4, um überlange Sequenzen zu vermeiden und den Synchronismus mit der Codierungskapazität von UTF-16 aufrechtzuerhalten; siehe die UTF-8 Artikel) und Trail -Einheiten haben die Reichweite von 80 uBf. Die Lead -Einheit zeigt auch, wie viele Trail -Einheiten folgen: eines nach C2 -df, zwei nach E0 - EF und drei nach F0 - F4.[c]

UTF-16 wurde entwickelt, um frei von der 65.536-Charakter-Grenze des ursprünglichen Unicode (1.x) ohne Kompatibilität mit der 16-Bit-Codierung zu sein. In UTF-16 haben Singletons den Bereich 0000-D7FF (55.296 Codepunkte) und E000-FFF (8192 Codepunkte, 63.488 insgesamt), leiten Sie den Bereich D800-DBFF (1024 Code-Punkte) und wandeln den Bereich DC00-DC00-DC00– DFFF (1024 Codepunkte, insgesamt 2048). Die Blei- und Traileinheiten, genannt hohe Leihmutter und Niedrige ErsatzstoffeIn der Unicode -Terminologie, MAP 1024 × 1024 oder 1.048.576 ergänzende Zeichen, wobei 1.112.064 (63.488 BMP -Codepunkte + 1.048.576 Codepunkte dargestellt werden, die durch hohe und niedrige Ersatzpaare) codierbare Codepunkte, OR oder oder oder niedrige Ersatzpaare), oder oder Skalarwerte Im Unicode -Sprachgebrauch (Ersatz sind nicht codierbar).

Siehe auch

Anmerkungen

  1. ^ Das Konzept geht jedoch lange vor dem Aufkommen des elektronischen Computers voraus, wie es darum zu sehen ist Morse-Code.
  2. ^ Als ein echtes Beispiel dafür, UTF-16, was die häufigsten Zeichen in genau der eben beschriebenen Weise darstellt (und Paare von 16-Bit-Code-Einheiten für weniger gemeinsame Zeichen verwendet), hat aufgrund seiner Inkompatibilität mit der allgegenwärtigen 7-/ Codierung für den Austausch nie als Codierung für den Austausch vorgesehen 8 Bit ASCII codieren, mit seiner beabsichtigten Rolle, stattdessen von übernommen zu werden UTF-8, die tut Erhalten Sie die Kompatibilität der ASCII.
  3. ^ In der Originalversion von UTF-8 von seiner Veröffentlichung von 1992 bis zu seinem Coderaum auf die von UTF-16 im Jahr 2003 war die Reichweite der Lead-Einheiten, die mit drei Einheiten nachverfolgten Ablaufsequenzen codiert, größer (F0-F7); Darüber hinaus folgten die Lead-Einheiten F8-FB von vier Trail-Einheiten und FC-FD um fünf. Fe-FF waren in einer Version von UTF-8 nie gültige Lead- oder Trail-Einheiten.

Verweise

  1. ^ Crispin, M. (April 2005). "UTF-9 und UTF-18 Effiziente Transformationsformate von Unicode". doi:10.17487/RFC4042. {{}}: Journal zitieren erfordert |journal= (Hilfe)