【问题标题】:Why does USB use UTF-16 for string (why not UTF-8)为什么 USB 使用 UTF-16 作为字符串(为什么不使用 UTF-8)
【发布时间】:2016-11-14 08:16:16
【问题描述】:

UTF-16 需要 2 个字节,UTF-8 需要 1 个字节。
而USB是面向8bit的,UTF-8更自然。

UTF-8 向后兼容 ASCII,UTF-16 不向后兼容。

UTF-16 需要 2 个字节,因此可能存在字节顺序问题。
(出现字节序问题,后来被USB-IF清除为小字节序。)

UTF-16 和 UTF-8 在功能上是

但为什么是 UTF-16?为什么不是 UTF-8?


UTF-16 和 UTF-8 的比较: https://en.wikipedia.org/wiki/UTF-8#Compared_to_UTF-16

【问题讨论】:

    标签: utf-8 character-encoding usb ascii utf-16


    【解决方案1】:

    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 相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      • 2014-06-21
      • 2014-05-17
      • 2014-01-18
      • 2015-11-08
      • 1970-01-01
      • 2018-06-11
      相关资源
      最近更新 更多