好。我知道这看起来像典型的“为什么他不只是谷歌它或去www.unicode.org并查找它?”问题,但对于这样一个简单的问题,答案仍然没有找到我检查两个来源后。
我很确定这三种编码系统都支持所有Unicode字符,但我需要在演示文稿中声明之前确认。
奖金问题:这些编码在可以扩展支持的字符数方面是否有所不同?
答案 0 :(得分:54)
答案 1 :(得分:39)
不,它们只是不同的编码方法。它们都支持对同一组字符进行编码。
UTF-8使用每个字符1到4个字节的任何位置,具体取决于您编码的字符。 ASCII范围内的字符只占用一个字节,非常不寻常的字符占用四个字符。
UTF-32每个字符使用四个字节,无论它是什么字符,因此它总是使用比UTF-8更多的空间来编码相同的字符串。唯一的优点是您可以通过仅计算字节数来计算UTF-32字符串中的字符数。
UTF-16对大多数字符使用两个字节,对于不常见字符使用四个字节。
http://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings
答案 2 :(得分:7)
UTF-8,UTF-16和UTF-32都支持全套unicode代码点。没有一个支持的字符而不支持另一个字符。
关于奖金问题“这些编码的字符数量是否可以扩展到支持?”是的,不是。 UTF-8和UTF-16的编码方式将它们可以支持的代码点总数限制为小于2 ^ 32。但是,Unicode Consortium不会向UTF-32添加无法用UTF-8或UTF-16表示的代码点。这样做会违反编码标准的精神,并且无法保证从UTF-32到UTF-8(或UTF-16)的一对一映射。
答案 3 :(得分:5)
我个人总是在有疑问时检查Joel's post有关unicode,编码和字符集的内容。
答案 4 :(得分:4)
所有UTF-8/16/32编码都可以映射所有Unicode字符。请参阅Wikipedia's Comparison of Unicode Encodings。
这篇IBM文章Encode your XML documents in UTF-8非常有帮助,并表明如果您有选择,最好选择UTF-8。主要原因是广泛的工具支持,UTF-8通常通过通过不知道unicode的系统。
来自IBM article中的规范说明部分:
W3C和IETF都有 最近变得更加坚定 选择UTF-8 first,last和 有时只。 W3C角色 万维网1.0的模型: 基础知识指出,“当一个独特的 字符编码是必需的, 字符编码必须是UTF-8, UTF-16或UTF-32。 US-ASCII是 向上兼容UTF-8(an US-ASCII字符串也是UTF-8 string,参见[RFC 3629]),UTF-8是 因此如果兼容性合适 需要使用US-ASCII。“在 练习,兼容US-ASCII 是如此有用它几乎是一个 需求。 W3C明智地解释说, “在其他情况下,例如 API,UTF-16或UTF-32可能更多 适当。可能的原因 选择其中之一包括 内部处理的效率和 与其他人的互操作性 流程。“
答案 5 :(得分:2)
正如大家所说,UTF-8,UTF-16和UTF-32都可以编码所有Unicode代码点。但是,UCS-2(有时被错误地称为UCS-16)变体不能,这是你找到的那个,例如在Windows XP / Vista中。
有关详细信息,请参阅Wikipedia。
编辑:我错了Windows,NT是唯一一个支持UCS-2的人。但是,许多Windows应用程序将假定每个代码点只有一个单词,如UCS-2,因此您可能会发现错误。见another Wikipedia article。 (感谢JasonTrue)