我正在阅读一些关于 Unicode 的 SO 问题,其中有一些我不完全理解的评论,比如这个:
Dean Harding:UTF-8 是一种可变长度编码,处理起来比固定长度编码更复杂。另外,请参阅我对 Gumbo 回答的评论:基本上,所有编码(UTF-8、UTF-16 和 UTF-32)中都存在组合字符,它们需要特殊处理。您可以使用与组合字符相同的特殊处理方法来处理 UTF-16 中的代理项对,因此在大多数情况下,您可以忽略代理项并将 UTF-16 视为固定编码。
我对最后一部分(“大部分”)有点困惑。如果 UTF-16 被视为固定的 16 位编码,这会导致什么问题?BMP 之外有字符的可能性有多大?如果有,如果您假设使用两字节字符,这会导致什么问题?
我阅读了关于代孕的维基百科信息,但它并没有真正让我更清楚!
编辑:我想我真正的意思是“为什么有人建议将 UTF-16 视为固定编码,而它似乎是假的?”
编辑2:
我在“有什么理由比 UTF-8 更喜欢 UTF-16? ”中发现了另一条评论,我认为这更好地解释了这一点:
Andrew Russell:为了性能:UTF-8 比 UTF-16 更难解码。在 UTF-16 中,字符要么是基本多语言平面字符(2 个字节),要么是代理对(4 个字节)。UTF-8 字符可以是 1 到 4 个字节之间的任意位置
这表明要提出的观点是 UTF-16 不会有任何三字节字符,因此通过假设 16 位,您不会因为结束一个字节而“完全搞砸”。但我仍然不相信这与假设 UTF-8 是单字节字符有什么不同!