Comment savoir si Python est compilé avec l'UCS-2 ou UCS-4?
Juste ce que dit le titre.
$ ./configure --help | grep -i ucs
--enable-unicode[=ucs[24]]
La recherche de la documentation officielle, j'ai trouvé ceci:
sys.maxunicode: Un entier donnant le
plus pris en charge du point de code pour un
Caractère Unicode. Le valeur de cette
dépend de l'option de configuration
qui spécifie si l'Unicode
les caractères sont stockés UCS-2 ou
UCS-4.
Ce n'est pas clair ici est - ce qui les valeur(s) correspondent à des UCS-2 et UCS-4.
Le code est prévu pour fonctionner sur la version 2.6 de Python+.
Vous devez vous connecter pour publier un commentaire.
Lorsque compilé avec l'option --enable-unicode=ucs4:
Lorsque compilé avec l'option --enable-unicode=ucs2:
Since the implementation of PEP 393 in Python 3.3, Unicode objects internally use a variety of representations
. python.org/dev/peps/pep-0393sys.maxunicode == 0x10ffff
). La souplesse des représentations permet d'obtenir des résultats corrects comme ucs4 n'sur les versions précédentes, tout en utilisant moins de mémoire que ucs4 dans certains cas.C'est 0xFFFF (ou 65535) pour UCS-2, et 0x10FFFF (ou 1114111) pour UCS-4:
Le maximum de caractères dans l'UCS-4 mode est défini par la maxmimum valeur représentable en UTF-16.
J'ai eu ce même problème une fois. J'ai recueilli moi-même sur mon wiki à
http://arcoleo.org/dsawiki/Wiki.jsp?page=Python%20UTF%20-%20UCS2%20or%20UCS4
J'ai écrit -
'UCS4' if sys.maxunicode > 65536 else 'UCS2'
.sysconfig dira l'unicode taille de l'variables de configuration de python.
La buildflags peut être interrogé comme ça.
Python 2.7:
Python 2.6:
J'ai eu le même problème et a trouvé une semi-officiel morceau de code qui fait exactement cela et peut être intéressante pour les personnes avec le même problème: https://bitbucket.org/pypa/wheel/src/cf4e2d98ecb1f168c50a6de496959b4a10c6b122/wheel/pep425tags.py?at=default&fileviewer=file-view-default#pep425tags.py-83:89.
Il s'agit de la roue projet qui doit vérifier si le python est compilé avec l'ucs-2 ou ucs-4, parce qu'il va changer le nom du fichier binaire généré.
Une autre façon est de créer un Unicode tableau et regardez la itemsize:
Citation de la
array
docs:Noter que la distinction entre étroit et large Unicode construit est passé de Python 3.3-là, voir PEP393. Le
'u'
typecode pourarray
est obsolète depuis 3.3 et retrait en Python 4.0.65535 est UCS-2: