CPython almacena cadenas de caracteres unicode como utf-16 o utf-32 internamente dependiendo de las opciones de compilación. En las construcciones utf-16 de Python string slicing, iteration y len
parecen funcionar en unidades de código, no en puntos de código, de modo que los caracteres multibyte se comportan de manera extraña.¿Qué significa sys.maxunicode?
por ejemplo, en CPython 2.6 con sys.maxunicode
= 65535:
>>> char = u'\U0001D49E'
>>> len(char)
2
>>> char[0:1]
u'\uu835'
>>> char[1:2]
u'\udc9e'
De acuerdo con la documentación de Python, es sys.maxunicode
"Entero que proporciona el mayor punto de código con el apoyo de un carácter Unicode."
¿Esto significa que las operaciones unicode
no están garantizadas para trabajar en puntos de código más allá de sys.maxunicode
? Si quiero trabajar con personajes fuera del BMP, ¿tengo que usar una compilación utf-32 o escribir mis propias operaciones portátiles unicode
?
me encontré con este problema en How to iterate over Unicode characters in Python 3?
Interesante. En CPython 3.2.2 (Win x64), 'sys.maxunicode' es' 65535' ... –