Wie finde ich heraus, ob Python mit UCS-2 oder UCS-4 kompiliert wurde?


Answers

Es ist 0xFFFF (oder 65535) für UCS-2 und 0x10FFFF (oder 1114111) für 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
}

Das maximale Zeichen im UCS-4-Modus wird durch den maximalen Wert definiert, der in UTF-16 dargestellt werden kann.

Question

Nur was der Titel sagt.

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

Bei der Suche in der offiziellen Dokumentation habe ich folgendes gefunden:

sys.maxunicode : Eine Ganzzahl, die den größten unterstützten Codepunkt für ein Unicode-Zeichen sys.maxunicode . Der Wert hängt von der Konfigurationsoption ab, die angibt, ob Unicode-Zeichen als UCS-2 oder UCS-4 gespeichert werden.

Was hier nicht klar ist, ist - welcher Wert entspricht UCS-2 und UCS-4.

Der Code wird voraussichtlich mit Python 2.6+ arbeiten.




Eine weitere Möglichkeit besteht darin, ein Unicode-Array zu erstellen und die itemsize zu betrachten:

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

Zitat aus der array Dokumentation :

Der 'u' Typcode entspricht Pythons Unicode-Zeichen. Bei schmalen Unicode-Builds ist dies 2 Byte, bei großen Builds sind es 4 Byte.

Beachten Sie, dass die Unterscheidung zwischen schmalen und breiten Unicode-Builds ab Python 3.3 python.org/dev/peps/pep-0393 , siehe python.org/dev/peps/pep-0393 . Der Typcode 'u' für array ist seit 3.3 veraltet und wurde in Python 4.0 entfernt.




sysconfig die Unicode-Größe von den Konfigurationsvariablen von Python mit.

Die Buildflags können so abgefragt werden.

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



Related