sys.maxunicode是什么意思?
根据编译选项,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
操作?
我遇到了这个问题,如何迭代Python 3中的Unicode字符?
超出sys.maxunicode=65535
字符使用UTF-16替代品在内部存储。 是的,你必须自己处理或使用广泛的构建。 即使构建范围很广,也可能需要处理由代码点组合代表的单个字符。 例如:
>>> print('au0301')
á
>>> print('xe1')
á
第一个使用组合重音字符,第二个不使用。 两者都打印相同。 您可以使用unicodedata.normalize
转换表单。