UTF-16 需要 2 个字节,UTF-8 需要 1 个字节。
这在两个方面都是错误的。 UTF-8 和 UTF-16 都是可变长度编码。您可能会想到 UCS-2(UTF-16 的前身),它确实只使用了 2 个字节(因此仅限于高达 U+FFFF 的代码点)。
UTF-8 为代码点 U+0000 - U+007F 使用 1 个字节,为代码点 U+0080 - U+07FF 使用 2 个字节,为 U+0800 - U+FFFF 使用 3 个字节,为代码点 U+10000 使用 4 个字节- U+10FFFF。
UTF-16 为代码点 U+0000 - U+FFFF 使用 2 个字节,为代码点 U+10000 - U+10FFFF 使用 4 个字节。
而 USB 是面向 8bit 的,UTF-8 更自然。
不是真的。如果考虑到上面提到的字节大小,UTF-16 实际上处理的代码点比 UTF-8 少。但无论如何,USB 更关心二进制数据而不是人类可读的文本数据。甚至 Unicode 字符串也以字节数为前缀,而不是字符数。因此,USB 的设计者可以使用他们想要的任何编码,只要他们将其标准化。他们选择了 UTF-16LE。
为什么?问设计师。我的猜测(这只是一个猜测)是因为 Microsoft 共同编写了 USB 1.0 规范,而 UCS-2(现为 UTF-16LE)是 Microsoft 为 Windows 选择的编码,所以他们可能想要在不涉及大量运行时转换的情况下保持兼容性。那时,Windows 几乎占据了 PC 市场的 90%,而其他操作系统,尤其是 *Nix,只有 5%。 Windows 98 是第一个直接在操作系统中烘焙 USB 的 Windows 版本(USB 是 Windows 95 中的一个可选附加组件),但即便如此,在 Apple 最终为 iMac 增加 USB 支持几年之前,USB 已经在 PC 中流行起来稍后。
此外,可能更重要的是,当时 UTF-8 仍然相对较新(创作 USB 1.0 时只有几年的历史),UCS-2 已经存在了一段时间,并且是当时主要的 Unicode 编码(Unicode 在几年内不会超过 65536 个代码点)。因此,当时通过使用 UCS-2(后来的 UTF-16LE)而不是 UTF-8 让 USB 支持国际文本可能是有意义的。如果他们决定改为使用 8 位编码,ISO-8859-1 可能比 UTF-8 更有意义(但按照今天的标准,ISO-8859-1 不再适用)。到 Unicode 最终突破 UCS-2 的 65536 个代码点限制时,在不破坏向后兼容性的情况下将编码更改为其他内容为时已晚。至少 UTF-16 与 UCS-2 向后兼容(这也是为什么 Windows 仍在使用 UTF-16 而没有像其他一些操作系统那样切换到 UTF-8 的原因)。
UTF-8 向后兼容 ASCII,UTF-16 不向后兼容。
是的。
UTF-16 需要 2 个字节,因此可能存在字节顺序问题。
没错。就此而言,与 UTF-32 相同。