【问题标题】:What would happen if all languages began doing strings in UTF-8?如果所有语言都开始用 UTF-8 处理字符串会发生什么?
【发布时间】:2014-07-02 18:56:59
【问题描述】:

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 并允许用户在需要支持其他字符编码时使用变通方法?这样做会有什么问题?

【问题讨论】:

  • 为什么不添加二进制文件==文本文件的unicode约定?你已经要求进行疯狂的猜测了。
  • 我不确定你在问什么,但我不是在处理原始字节和二进制数据,我是在专门谈论文本字符串。如果有人想做原始的二进制文件,请使用 Java 的 byte 类或 C 的 char,它们绝对应该是 Unicode。

标签: unicode utf-8


【解决方案1】:

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

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

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

GB2312 是主要的中文字符集,它将整个中文字母编码为两个字节的字符,而所有这些字符在 UTF-8 中都是 3 个字节(增加 50%)

UTF-8 的兼容性令人惊叹,但就它在内存中表示字符的方式而言,其他编码在很多情况下都胜过它。

【讨论】:

  • 1. 无关紧要第 n 个字符在哪里,无论如何您都可以很好地迭代它们(您所描述的情况极为罕见)。 2. 仅当数据可以携带明确的标签(不是 BOM 混乱或其他启发式方法)来确定实际编码时,使用较旧的(Microspeak 中的传统)编码才有用。 (好吧,如果您不使用其他语言和符号,电子邮件就可以了)3. 存储参数是死马:如果您想要空间效率,您'会压缩,几乎看不到差异。对于标记语言(或中文)来说,这是一个特别糟糕的论点。
  • 1- 在具有两个长度为 N 个字符的字符串的数据库实体中,如果您不使用固定长度编码,那么您必须允许每个字符的最大字节数以适应最坏的情况 -案例场景(utf-8 为 N * 4) 2- 任何允许多个字符编码的媒体也将允许元数据指定正在使用的内容,否则它将无用。 3-这取决于您可以使用什么压缩。中文有超过 8000 个独特的字符,即使在最好的情况下也意味着两个字节。据我所知,RLE 压缩也不适用于中文。
  • 1-您对定义文本列长度的定义做出了错误的决定2:它应该是字形、代码点还是代码单元?只有最后一个是理智的。 2-实际上不是。有时,您应该知道(或猜对了)。对于文件尤其普遍。 3-使用标准gzip等。无论如何,您忘记了密集文本很少具有相关大小,在少数情况下您会找到它。反向链接到我所说的关于标记的内容,这只是最突出的例子。
  • Java 和 .NET 使用的 UTF-16 也是一种可变长度编码,因此可变长度编码已经在主要语言中使用。另一方面,很多很多 Java 和 .NET 程序都认为,将 Unicode 使用限制在 BMP 子集并不是为了满足他们的用户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 2020-02-15
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
相关资源
最近更新 更多