sys.maxunicode是什么意思?

Pet*_*ham 7 python unicode

CPython在内部将unicode字符串存储为utf-16或utf-32,具体取决于编译选项.在utf-16版本的Python字符串切片,迭代中,len似乎可以处理代码单元,而不是代码点,因此多字节字符的行为很奇怪.

例如,在CPython 2.6上使用sys.maxunicode= 65535:

>>> char = u'\U0001D49E'
>>> len(char)
2
>>> char[0:1]
u'\uu835'
>>> char[1:2]
u'\udc9e'
Run Code Online (Sandbox Code Playgroud)

根据Python文档,sys.maxunicode"为Unicode字符提供最大支持代码点的整数".

这是否意味着unicode无法保证操作超出代码点sys.maxunicode?如果我想使用BMP之外的字符,我必须使用utf-32构建或编写我自己的便携式unicode操作吗?

我在如何迭代Python 3中的Unicode字符时遇到了这个问题

Mar*_*nen 5

超出的字符sys.maxunicode=65535使用 UTF-16 代理在内部存储。是的,您必须自己处理这个问题或使用广泛的构建。即使使用广泛的构建,您也可能必须处理由代码点组合表示的单个字符。例如:

\n\n
>>> print('a\\u0301')\n\xc3\xa1\n>>> print('\\xe1')\n\xc3\xa1\n
Run Code Online (Sandbox Code Playgroud)\n\n

第一个使用组合重音字符,第二个则不使用。两者打印相同。您可以使用unicodedata.normalize来转换表格。

\n