2016-07-12 2 views
0

UTF-16には2バイトが必要で、UTF-8には1バイトが必要です。
とUSBは8ビット指向であり、UTF-8はより自然です。USBが文字列にUTF-16を使用する理由(UTF-8ではない理由)

UTF-8はASCIIと下位互換性がありますが、UTF-16はそれと互換性がありません。

UTF-16には2バイトが必要なため、エンディアンの問題が発生する可能性があります。
(エンディアンの問題が発生して、後でそれがリトルエンディアンとしてUSB-IFによってclearifiedた。)

UTF-16とUTF-8は、機能的に

ですが、なぜUTF-16?なぜUTF-8ではないのですか?


UTF-16の比較ですとUTF-8: https://en.wikipedia.org/wiki/UTF-8#Compared_to_UTF-16

答えて

4

UTF-16は2バイトとUTF-8は、1つのバイトを必要とする必要とします。

これは両方のカウントで間違っています。 UTF-8とUTF-16はどちらも可変長エンコードです。代わりに実際には2バイトしか使用しなかったUCS-2(UTF-16の前身)を考えているかもしれません(U + FFFFまでのコードポイントに限定されていました)。 U + 0000 - U + 07FF、U + 0080 - U + 07FFの2バイト、U + 0800 - U + FFFFの3バイト、コードポイントU + 0000 - U + 07Fの4バイトUTF - 8はコードポイントU + 0000 - U + 10000 - U + 10FFFF。

UTF-16はコードポイントU + 0000 - U + FFFFに2バイト、コードポイントU + 10000 - U + 10FFFFに4バイトを使用します。

とUSBは8ビット指向のため、UTF-8はより自然です。

実際はありません。上記のバイトサイズを考慮すると、UTF-16は実際にUTF-8より少ないコードユニットでより多くのコードポイントを処理します。しかし、いずれにしても、USBは人間が読めるテキストデータよりもバイナリデータに関することを重視しています。 Unicode文字列の先頭には、文字数ではなくバイト数が付いています。したがって、USBの設計者は、標準化している限り、必要なエンコーディングを使用できました。彼らはUTF-16LEを選択しました。

なぜですか?デザイナーに尋ねる。私のの推測(これはちょうど推測です)は、MicrosoftがUSB 1.0仕様を共同制作し、UCS-2(現在のUTF-16LE)がWindows用のMicrosoftのエンコーディングであるため、おそらく関係なく互換性を維持したいと考えていたからです多くのランタイム変換。当時、WindowsはPC市場の90%近くを占めていましたが、他のOS、特に* Nixはわずか5%でした。 Windows 98は、USBがOSに直接焼き付けられた最初のWindows版でしたが(USBはWindows 95のオプションのアドオンでした)、それでもなおUSBはすでにPCで普及していましたが、Appleは数年後にiMacにUSBサポートを追加しました後で。

さらに、UTF-8はまだ比較的新しい(USB 1.0が作成されたのはわずか数年であった)、UCS-2はしばらくの間、 (Unicodeは65536コードポイントを数年以上超えることはありません)。したがって、UTF-8の代わりにUCS-2(後のUTF-16LE)を使用することで、USBが国際化テキストをサポートするようになったのは当然のことです。代わりに8ビットのエンコーディングを決めた場合、ISO-8859-1はおそらくUTF-8よりも意味をなさないでしょう(しかし、今日の標準では、ISO-8859-1ではもうそれをカットしません)。そして、UnicodeがUCS-2の65536コードポイントの限界を最終的に打ち砕くまでには、後方互換性を損なうことなくエンコーディングを変更するのは時期尚早でした。少なくともUTF-16はUCS-2と下位互換性があります(これは、WindowsがまだUTF-16を使用していて、他のOSのようにUTF-8に切り替わらない同じ理由です)。

UTF-8はASCIIと下位互換性がありますが、UTF-16はそうではありません。

真。

UTF-16は2バイト必要です。エンディアンの問題があります。

真。 UTF-32と同じです。

関連する問題