9

我知道最近网络主要是对 UTF-8 进行标准化,我只是想知道是否有任何地方使用 UTF-8 会是一件坏事。我听说过 UTF-8、16 等可能使用更多空间的论点,但最终它可以忽略不计。

另外,在 Windows 程序、Linux shell 和类似的东西中——你能在那里安全地使用 UTF-8 吗?

4

3 回答 3

0

If UTF-32 is available, prefer that over the other versions for processing.

If your platform supports UTF-32/UCS-4 Unicode natively - then the "compressed" versions UTF-8 and UTF-16 may be slower, because they use varying numbers of bytes for each character (character sequences), which makes impossible to do a direct lookup in a string by index, while UTF-32 uses 32 bit "flat" for each character, speeding up some string operations a lot.

Of course, if you are programming in a very restricted environment like, say, embedded systems and can be certain there will be only ASCII or ISO 8859-x characters around, ever, then you can chose those charsets for efficiency and speed. But in general, stick with the Unicode Transformation Formats.

于 2011-01-15T00:23:36.090 回答
0

当您需要编写一个程序(执行字符串操作)需要非常非常快并且您确定不需要外来字符时,UTF-8 可能不是最好的主意。在所有其他情况下,UTF-8 应该是一个标准。

UTF-8 适用于几乎所有最新的软件,甚至在 Windows 上。

于 2011-01-15T00:05:53.687 回答
-1

众所周知,utf-8 最适合文件存储和网络传输。但人们争论 utf-16/32 是否更适合处理。一个主要论点是 utf-16 仍然是可变长度的,甚至 utf-32 仍然不是每个字符一个代码点,那么它们比 utf-8 好在哪里?我的观点是 utf-16 是一个非常好的折衷方案。

首先,在 utf-16 中需要双代码点的 BMP 之外的字符是极少使用的。该范围内的汉字(以及其他一些亚洲字符)基本上是死的。普通人根本不会用,除非专家用它来数字化古籍。所以,utf-32 大部分时间都是浪费。不要太担心这些字符,因为如果你没有正确处理它们,它们不会让你的软件看起来很糟糕,只要你的软件不是为那些特殊用户准备的。

其次,我们通常需要将字符串内存分配与字符数相关联。例如,10 个字符的数据库字符串列(假设我们以标准化形式存储 unicode 字符串),对于 utf-16,它将是 20 个字节。在大多数情况下,它会像那样工作,除非在极端情况下它只能容纳 5-8 个字符。但是对于 utf-8,一个字符的公共字节长度对于西方语言是 1-3,对于亚洲语言是 3-5。这意味着即使在常见情况下我们也需要 10-50 个字节。更多数据,更多处理。

于 2011-11-14T15:34:40.933 回答