sys.maxunicode是什么意思?

时间:2011-09-21 05:52:19

标签: 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'

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

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

我在How to iterate over Unicode characters in Python 3?

中遇到了这个问题

1 个答案:

答案 0 :(得分:3)

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

>>> print('a\u0301')
á
>>> print('\xe1')
á

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