python unicode ucs2

¿Cómo averiguar si Python está compilado con UCS-2 o UCS-4?



unicode ucs2 (7)

Sólo lo que dice el título.

$ ./configure --help | grep -i ucs --enable-unicode[=ucs[24]]

Buscando la documentación oficial, encontré esto:

sys.maxunicode : un entero que proporciona el punto de código admitido más grande para un carácter Unicode. El valor de esto depende de la opción de configuración que especifica si los caracteres Unicode se almacenan como UCS-2 o UCS-4.

Lo que no está claro aquí es qué valor corresponde a UCS-2 y UCS-4.

Se espera que el código funcione en Python 2.6+.



Cuando se compila con --enable-unicode = ucs4:

>>> import sys >>> print sys.maxunicode 1114111

Cuando se construye con --enable-unicode = ucs2:

>>> import sys >>> print sys.maxunicode 65535


Es 0xFFFF (o 65535) para UCS-2 y 0x10FFFF (o 1114111) para UCS-4:

Py_UNICODE PyUnicode_GetMax(void) { #ifdef Py_UNICODE_WIDE return 0x10FFFF; #else /* This is actually an illegal character, so it should not be passed to unichr. */ return 0xFFFF; #endif }

El carácter máximo en el modo UCS-4 se define por el valor máximo representable en UTF-16.


Otra forma es crear una matriz Unicode y observar el ítem:

import array bytes_per_char = array.array(''u'').itemsize

Cita de los documentos de la array :

El código de tipo ''u'' corresponde al carácter unicode de Python. En construcciones Unicode estrechas, esto es de 2 bytes, en construcciones amplias, esto es de 4 bytes.

Tenga en cuenta que la distinción entre compilaciones Unicode estrechas y anchas se python.org/dev/peps/pep-0393 de Python 3.3 en adelante, consulte python.org/dev/peps/pep-0393 . El código de tipo ''u'' para la array está en desuso desde 3.3 y está programado para su eliminación en Python 4.0.




sysconfig le dirá al tamaño Unicode de las variables de configuración de python.

Los buildflags se pueden consultar de esta manera.

Python 2.7:

import sysconfig sysconfig.get_config_var(''Py_UNICODE_SIZE'')

Python 2.6:

import distutils distutils.sysconfig.get_config_var(''Py_UNICODE_SIZE'')