如果所有语言都开始使用UTF-8字符串会发生什么?

时间:2014-07-02 18:56:59

标签: unicode utf-8

Unicode太棒了。没有太多人不同意这一点。

除了Python 3(which did it wrong)之外,所有编程语言的下一个主要版本默认使用Unicode / UTF-8字符串会产生什么负面影响(如果有的话)?

我特别谈到需要解决方法来获得UTF-8的许多案例。例如,运行Java程序:

java ... -Dfile.encoding=UTF-8

或者使用Python 2中的字符串:

# -*- coding: utf8 -*-
...
unicode_string = u"This is Unicode Text"

默认情况下,某些MySQL数据库默认使用不同的字符编码:

[server]
collation_server=utf8_unicode_ci
character_set_server=utf8

等。等。

为什么我们都不默认使用Unicode / UTF-8并允许用户在需要支持其他字符编码时使用变通办法?这样做会有什么问题?

1 个答案:

答案 0 :(得分:0)

UTF-8是一种可变长度编码,解析速度比固定长度编码慢。示例:ASCII字符串的第7个字符始终是第7个字节。我们并不知道UTF-8字符串的第7个字符在内存中的确切位置,而不是从字符串的开头开始并解析整个字符串。对于长串,这可能很昂贵。

因此,对于字符串操作,根据字符/字节位置查找特定的子字符串很重要(SQL数据库就是一个很好的例子),其他编码通常更可取。

此外,UTF-8将非英语文本(在ASCII范围之外)编码为两个或更多字节,而许多字符编码(俄语中的koi8-r,作为示例)编码所有常用字符单字节中的其他语言,对于电子邮件等媒介很方便,所有数据都必须通过网络发送。

GB2312是主要的中文字符集,用双字节字符对整个中文字母进行编码,而所有这些字符在UTF-8中都是3字节(增加50%)

UTF-8在兼容性方面令人惊叹,但就其在内存中如何表示字符而言,其他编码在很多场景中都胜过它。