Pregunta

Justo lo que dice el título.

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

Buscando en la documentación oficial, encontré esto:

  

sys.maxunicode : Un entero que da   mayor punto de código compatible para un   Carácter Unicode. El valor de esto   depende de la opción de configuración   que especifica si Unicode   los caracteres se almacenan como UCS-2 o   UCS-4.

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

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

¿Fue útil?

Solución

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

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

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

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

Otros consejos

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 modo UCS-4 está definido por el valor máximo representable en UTF-16.

Tuve este mismo problema una vez. Lo documenté en mi wiki en

http://arcoleo.org /dsawiki/Wiki.jsp?page=Python%20UTF%20-%20UCS2%20or%20UCS4

Escribí -

import sys
sys.maxunicode > 65536 and 'UCS4' or 'UCS2'

sysconfig indicará el tamaño unicode de las variables de configuración de python.

Las banderas de compilación 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')

Tuve el mismo problema y encontré un código semioficial que hace exactamente eso y puede ser interesante para las personas con el mismo problema:

Otra forma es crear una matriz Unicode y ver el tamaño del elemento:

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

Cita de array docs :

  

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

Tenga en cuenta que la distinción entre compilaciones Unicode estrechas y anchas se elimina de Python 3.3 en adelante, consulte PEP393 . El código de tipo 'u' para array está en desuso desde 3.3 y está programado para su eliminación en Python 4.0.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top