1

除了字符存储方式的不同,还有什么语言utf-32可以显示而utf-8不能显示的特殊字符?

4

4 回答 4

2

所有 UTF 编码都可以表示相同范围的代码点(0 到 0x10FFFF)。因此,相同的字符可以由它们中的任何一个进行编码。

它们是否可以“显示”是一个完全不同的问题。这与编码无关,而是使用的字体系列的功能。我不确定任何字体对于每个 Unicode 代码点都有字形。但我假设你的意思是“代表”。

它们在表示给定字符串所需的字节数方面确实有所不同。对于非亚洲语言,UTF-8 几乎总是最短的。对于那些,UTF-16 可能会赢(我还没有真正“基准化”。)我无法想象 UTF-32 会是最佳的现实案例。

于 2011-11-17T08:53:00.003 回答
1

有没有他们不能代表的角色?

理论上:没有。

所有这些格式都可以表示所有 Unicode 代码点。

在实践中:取决于。

Windows API 使用 UCS-2(这几乎是第一个 UTF-16 块)并且并不总是正确处理代理项。因此,您可能希望使用 UTF-16 让您的程序与其他程序相比尽可能“正常”,而不是手动截断高范围的 UTF-32 代码点。

还要别的吗?

是的:使用 UTF-8!

它是无字节序的,所以它避免了字节顺序问题,这在后面很痛苦。
当然,如果您使用的是 Windows,那么您需要在使用它们之前转换为 UTF-16。

于 2011-11-17T08:59:46.880 回答
0

UTF-8、UTF-16 和 UTF-32 都可用于表示所有 Unicode 数据点。所以不,没有可以用 UTF-32 而不是 UTF-8 表示的特殊字符。

于 2011-11-17T08:54:36.800 回答
0

1) UTF-8 可以向后兼容常规英文字符的 ASCII,当您的客户端只有英文字符时,这可能是一个优势。

2) 如果 ASCII 字符多于非英文字符,UTF-8 可以很好地节省网络带宽。

3)如果您在节省存储空间方面有更多的非英文字符,UTF-16 会很好。

我建议根据上面的#1 使用 UTF-8。

于 2016-03-27T05:34:22.360 回答