2016-07-12 31 views
0

UTF-16 erfordern 2 Byte und UTF-8 erfordern 1 Byte.
und USB ist 8bit orientiert, UTF-8 ist natürlicher.Warum verwendet UTF-16 für Zeichenfolge (warum nicht UTF-8)

UTF-8 ist abwärtskompatibel mit ASCII, UTF-16 nicht.

UTF-16 erfordern 2 Byte, also könnte es ein Endian-Problem haben.
(Endianness Problem auftrat, wurde später von USB-IF als Little-Endian-clearified.)

UTF-16 und UTF-8 sind funktionell

aber warum UTF-16? Warum nicht UTF-8?


Vergleich der UTF-16 und UTF-8: https://en.wikipedia.org/wiki/UTF-8#Compared_to_UTF-16

Antwort

4

UTF-16 2-Byte erfordern und UTF-8 erfordern 1 Byte.

Dies ist in beiden Fällen falsch. Sowohl UTF-8 als auch UTF-16 sind Codierungen mit variabler Länge. Sie könnten stattdessen an UCS-2 denken (Vorgänger von UTF-16), das tatsächlich nur 2 Bytes benutzte (und daher nur auf Codepunkte bis zu U + FFFF beschränkt war).

UTF-8 verwendet 1 Byte für Codepunkte U + 0000 - U + 007F, 2 Byte für Codepunkte U + 0080 - U + 07FF, 3 Byte für U + 0800 - U + FFFF und 4 Byte für Codepunkte U + 10000 - U + 10FFFF.

UTF-16 verwendet 2 Byte für Codepunkte U + 0000 - U + FFFF und 4 Byte für Codepunkte U + 10000 - U + 10FFFF.

und USB ist 8bit orientiert, UTF-8 ist natürlicher.

Nicht wirklich. Wenn Sie die oben erwähnten Bytegrößen berücksichtigen, behandelt UTF-16 tatsächlich mehr Codepunkte mit weniger Codeeinheiten als UTF-8. Aber USB interessiert sich in jedem Fall mehr für binäre Daten als für lesbare Textdaten. Sogar Unicode-Zeichenfolgen wird eine Byteanzahl vorangestellt, keine Zeichenanzahl. Die Entwickler von USB hätten also jede gewünschte Kodierung verwenden können, solange sie diese standardisierten. Sie wählten UTF-16LE.

Warum? Fragen Sie die Designer. Meine erraten (und das ist nur eine Vermutung) ist, weil Microsoft die USB 1.0-Spezifikation mitverfasst, und UCS-2 (jetzt UTF-16LE) war Microsoft-Codierung der Wahl für Windows, so dass sie wahrscheinlich die Kompatibilität beibehalten wollten, ohne zu beteiligen viele Laufzeitkonvertierungen. Damals hatte Windows fast 90% des PC-Marktes, während andere Betriebssysteme, insbesondere * Nix, nur 5% hatten. Windows 98 war die erste Windows-Version, bei der USB direkt im Betriebssystem verbaut wurde (USB war ein optionales Add-On in Windows 95), aber selbst dann wurde USB bereits populär in PCs, bevor Apple schließlich ein paar Jahre lang USB-Unterstützung für iMacs hinzufügte später.

Neben, UTF-8 war damals noch relativ neu (es war nur ein paar Jahre alt, als USB 1.0 erstellt wurde), UCS-2 war schon eine Weile und war die primäre Unicode-Codierung bei der Zeit (Unicode würde 65536 Codepoints für ein paar Jahre nicht überschreiten). Daher war es zu der Zeit wahrscheinlich sinnvoll, USB-Unterstützung für internationalen Text zu haben, indem UCS-2 (später UTF-16LE) anstelle von UTF-8 verwendet wurde. Wenn sie sich stattdessen für eine 8-Bit-Kodierung entschieden hätten, wäre ISO-8859-1 wahrscheinlich sinnvoller als UTF-8 (aber nach heutigen Standards schneidet ISO-8859-1 nicht mehr ab).Zu der Zeit, als Unicode schließlich die 65536-Codepoint-Grenze von UCS-2 durchbrach, war es zu spät, die Codierung in etwas anderes zu ändern, ohne die Rückwärtskompatibilität zu zerstören. Zumindest UTF-16 ist abwärtskompatibel mit UCS-2 (das ist der gleiche Grund, warum Windows immer noch UTF-16 verwendet und nicht wie andere Betriebssysteme auf UTF-8 umschaltet).

UTF-8 ist abwärtskompatibel mit ASCII, UTF-16 nicht.

Wahr.

UTF-16 erfordern 2 Byte, also könnte es ein Endian-Problem haben.

Wahr. Das gleiche gilt für UTF-32.