Domanda

Proprio quello che dice il titolo.

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

Cercando la documentazione ufficiale, ho trovato questo:

  

sys.maxunicode : Un numero intero che indica il   il più grande punto di codice supportato per a   Carattere Unicode. Il valore di questo   dipende dall'opzione di configurazione   che specifica se Unicode   i caratteri sono memorizzati come UCS-2 o   UCS-4.

Ciò che non è chiaro qui è - quale valore (i) corrisponde a UCS-2 e UCS-4.

Il codice dovrebbe funzionare su Python 2.6+.

È stato utile?

Soluzione

Se creato con --enable-unicode = ucs4:

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

Se creato con --enable-unicode = ucs2:

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

Altri suggerimenti

Sono 0xFFFF (o 65535) per UCS-2 e 0x10FFFF (o 1114111) per 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
}

Il carattere massimo in modalità UCS-4 è definito dal valore massimo rappresentabile in UTF-16.

Ho avuto lo stesso problema una volta. L'ho documentato da solo sul mio wiki su

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

Ho scritto -

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

sysconfig indicherà la dimensione dell'unicode dalle variabili di configurazione di python.

I flag di build possono essere interrogati in questo modo.

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')

Ho avuto lo stesso problema e ho trovato un codice semi-ufficiale che fa esattamente questo e potrebbe essere interessante per le persone con lo stesso problema: https://bitbucket.org/pypa/wheel/src/cf4e2d98ecb1f168c50a6de496959b4a10c6b122/wheel /pep425tags.py?at=default&fileviewer=file-view-default#pep425tags.py-83:89 .

Viene dal progetto wheel che deve verificare se il python è compilato con ucs-2 o ucs-4 perché cambierà il nome del file binario generato.

Un altro modo è quello di creare un array Unicode e guardare le dimensioni degli elementi:

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

Citazione dai array docs :

  

Il codice di tipo 'u' corrisponde al carattere unicode di Python. Nelle build Unicode strette si tratta di 2 byte, nelle build wide si tratta di 4 byte.

Nota che la distinzione tra build Unicode strette e larghe viene eliminata da Python 3.3 in poi, vedi PEP393 . Il codice di tipo 'u' per array è obsoleto dal 3.3 e pianificato per la rimozione in Python 4.0.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top