2008-12-24 63 views
3

处理内存时,unicode字符串最受欢迎的格式是什么?为什么?进程内存中的Unicode字符串

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

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

回答

4

UTF16是最广泛使用的格式。

UTF16超过UTF8的优势在于,尽管是那么紧凑,每一个角色都有的2字节(16位)一定的大小 - 只要坚持2个字节字符,当你不使用替代品(,编码被称为UCS-2)。

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

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

+1

Unicode有1112064有效码点,所以 [UTF-16是可变宽度:1或2块的16个比特](https://en.wikipedia.org/wiki/ UTF-16)。根据维基百科的说法,UTF-16的单块子集确实是不够的:“从Unicode 9.0开始,一些现代非拉丁亚洲,中东和非洲的脚本不在这个范围内,大多数表情符号也是如此” – 2017-11-22 11:21:05

3

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

Here's an interesting discussion from python-dev on the requirements and trade-offs in choose the Unicode internal representation for Python 3.0。尽管有更多的内容有比我可以简要地描述,它包括:

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