Что означает sys.maxunicode? - PullRequest
       3

Что означает sys.maxunicode?

7 голосов
/ 21 сентября 2011

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 операции?

Я столкнулся с этой проблемой в Как перебирать Unicodeсимволы в Python 3?

1 Ответ

3 голосов
/ 21 сентября 2011

Символы за пределами sys.maxunicode=65535 хранятся внутри с использованием суррогатов UTF-16.Да, вы должны разобраться с этим самостоятельно или использовать широкую сборку.Даже при широкой сборке вам, возможно, придется иметь дело с отдельными символами, представленными комбинацией кодовых точек.Например:

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

Первый использует комбинирующий символ ударения, а второй - нет.Оба печатают одинаково.Вы можете использовать unicodedata.normalize для преобразования форм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...