【发布时间】:2011-02-21 13:28:00
【问题描述】:
我正在阅读一些关于 Unicode 的 SO 问题,其中有一些我不完全理解的 cmets,比如这个:
Dean Harding: UTF-8 是一个 可变长度编码,即 比处理更复杂 定长编码。另外,看看我的 cmets 对 Gumbo 的回答:基本上, 组合字符存在于所有 编码(UTF-8、UTF-16 和 UTF-32)和 它们需要特殊处理。你可以 使用与您相同的特殊处理 用于组合字符也 处理 UTF-16 中的代理对,所以 在大多数情况下,您可以忽略 代理和对待 UTF-16 就像 一个固定的编码。
我对最后一部分(“大部分”)有点困惑。如果 UTF-16 被视为固定的 16 位编码,这会导致什么问题? BMP 之外有字符的可能性有多大?如果存在,如果您假设为两字节字符,这会导致什么问题?
我在 Surrogates 上阅读了 Wikipedia 信息,但它并没有真正让我更清楚!
编辑:我想我真正的意思是“为什么有人建议将 UTF-16 视为虚假的固定编码?”
编辑2:
我在“Is there any reason to prefer UTF-16 over UTF-8?”中发现了另一条评论,我认为这更好地解释了这一点:
Andrew Russell: 性能方面: UTF-8 比 UTF-8 更难解码 UTF-16。在 UTF-16 中,字符是 一个基本的多语言平面 字符(2 个字节)或代理项 对(4 个字节)。 UTF-8 字符可以 介于 1 到 4 个字节之间
这表明 UTF-16 不会有任何三字节字符,因此假设 16 位,您不会因为结束一字节而“完全搞砸”。但我仍然不相信这与假设 UTF-8 是单字节字符有什么不同!
【问题讨论】:
标签: unicode utf-16 unicode-string