【问题标题】:Unicode strings in process memory进程内存中的 Unicode 字符串
【发布时间】:2008-12-24 11:36:37
【问题描述】:

在处理 unicode 字符串时,内存中最喜欢的格式是什么?为什么?

我正在通过为其生成可执行文件映像来实现一种编程语言。显然,一个有效的编程语言实现需要一个处理字符串的协议。

我考虑过使用动态数组作为字符串的基础,因为它们实现起来非常简单,并且对于短字符串非常有效。当以这种方式使用字符串时,我只是不知道字符的最佳可能格式。

【问题讨论】:

    标签: x86 language-design language-implementation


    【解决方案1】:

    UTF16 是使用最广泛的格式。

    UTF16 相对于UTF8 的优势在于,尽管不那么紧凑,但每个字符都有 2 字节(16 位)的恒定大小 - 只要您不使用代理(当坚持使用 2 字节字符时,编码称为UCS-2)。

    在 UTF8 中,只有一小部分字符编码为 1 个字节,其他字符则为 4 个字节。这使得字符处理不那么直接并且更容易出错。

    当然首选使用 Unicode,因为它可以处理国际字符。

    【讨论】:

    • Unicode 有 1,112,064 个有效代码点,所以 UTF-16 is variable-width: 1 or 2 chunks of 16 bits。根据维基百科,UTF-16 的单块子集确实不够:“从 Unicode 9.0 开始,一些现代非拉丁亚洲、中东和非洲文字超出了这个范围,大多数表情符号字符也是如此”
    【解决方案2】:

    C Python 2.x 系列根据平台/构建/等使用 UTF-16 和 UCS-4。

    Here's an interesting discussion 来自 python-dev,关于选择 Python 3.0 的 Unicode 内部表示的要求和权衡。虽然那里的内容比我可以简要描述的要多,但它包括:

    • 讨论外部接口(恒定时间切片、.lower、.islower 等的高效实现)
    • 外部要求(GTK 采用 UTF-8 字符串,QT 采用 UTF-16 和 UCS-4 字符串,Windows 采用 UT-16 字符串等)
    • 它指向 Unicode 数据的其他实现(例如 QT)。
    • 它讨论了重要的用例(与外部接口密切相关)。

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      • 2017-11-05
      • 2019-05-12
      相关资源
      最近更新 更多