进程内存中的Unicode字符串

时间:2008-12-24 11:36:38

标签: x86 language-design language-implementation

处理它们时,内存中最优选的unicode字符串格式是什么?为什么?

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

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

2 个答案:

答案 0 :(得分:4)

UTF16是使用最广泛的格式。

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

在UTF8中,只有一小组字符在1字节上编码,其他字符在4字节上。这使得字符处理更不直接,更容易出错。

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

答案 1 :(得分:3)

C Python 2.x系列使用UTF-16和UCS-4,具体取决于platform / build /等。

来自python-dev的

Here's an interesting discussion关于选择Python 3.0的Unicode内部表示的要求和权衡。虽然这里的内容比我简单描述的更多,但它包括:

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