UTF-8,UTF-16和UTF-32可以存储的字符数不同吗?

时间:2008-09-24 22:51:46

标签: unicode character-encoding utf

好。我知道这看起来像典型的“为什么他不只是谷歌它或去www.unicode.org并查找它?”问题,但对于这样一个简单的问题,答案仍然没有找到我检查两个来源后。

我很确定这三种编码系统都支持所有Unicode字符,但我需要在演示文稿中声明之前确认。

奖金问题:这些编码在可以扩展支持的字符数方面是否有所不同?

6 个答案:

答案 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)