是否有任何理由不使用UTF-8,16等等?

时间:2011-01-15 00:00:26

标签: character-encoding utf

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

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

3 个答案:

答案 0 :(得分:1)

如果UTF-32可用,则优先于其他版本进行处理。

如果您的平台本身支持UTF-32 / UCS-4 Unicode - 那么“压缩”版本UTF-8和UTF-16可能会更慢,因为它们对每个字符(字符序列)使用不同数量的字节,不可能通过索引在字符串中直接查找,而UTF-32对每个字符使用32位“flat”,从而大大加快了一些字符串操作。

当然,如果你是在一个非常有限的环境中进行编程,例如嵌入式系统,并且可以确定只有ASCII或ISO 8859-x字符,永远,那么你可以选择那些字符集来提高效率和速度。但总的来说,坚持使用 Unicode转换格式

答案 1 :(得分:0)

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

UTF-8几乎适用于所有近期软件,即使在Windows上也是如此。

答案 2 :(得分:0)

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

首先,BMP中需要双重代码点的字符在utf-16中非常少用。该范围内的汉字(也包括其他一些亚洲字符)基本上都是死的。普通人根本不会使用它们,除非专家用它来数字化古籍。因此,utf-32在大多数情况下都是浪费。不要过分担心这些角色,因为只要你的软件不适合这些特殊用户,如果你没有正确处理它们,它们就不会让你的软件看起来很糟糕。

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