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转换表单。

链接地址: http://www.djcxy.com/p/9149.html

上一篇: What does sys.maxunicode mean?

下一篇: Disposing a HtmlControl