CPython memorizza le stringhe unicode come utf-16 o utf-32 internamente in base alle opzioni di compilazione. Nelle versioni utf-16 di slicing delle stringhe di Python, iterazione e len
sembrano funzionare su unità di codice, non su punti di codice, in modo che i caratteri multibyte si comportino in modo strano.Cosa significa sys.maxunicode?
esempio su CPython 2.6 con sys.maxunicode
= 65535:
>>> char = u'\U0001D49E'
>>> len(char)
2
>>> char[0:1]
u'\uu835'
>>> char[1:2]
u'\udc9e'
Secondo la documentazione di Python, sys.maxunicode
è "Un intero che il più grande punto di codice supportato per un carattere Unicode."
Ciò significa che le operazioni unicode
non sono garantite per funzionare su punti di codice oltre sys.maxunicode
? Se voglio lavorare con personaggi al di fuori del BMP, devo usare una compilazione utf-32 o scrivere le mie operazioni portatili unicode
?
mi sono imbattuto in questo problema in How to iterate over Unicode characters in Python 3?
Interessante. Su CPython 3.2.2 (Win x64), 'sys.maxunicode' è' 65535' ... –