Jak sprawdzić, czy Python jest kompilowany z UCS-2 lub UCS-4?
Dokładnie to, co mówi tytuł.
$ ./configure --help | grep -i ucs
--enable-unicode[=ucs[24]]
Przeszukując oficjalną dokumentację, znalazłem to:
Sys.maxunicode : liczba całkowita dająca największy obsługiwany punkt kodowy dla Znak Unicode. wartość tego zależy od opcji konfiguracji która określa, czy Unicode znaki są zapisywane jako UCS-2 lub UCS-4.
Nie jest jasne, jakie wartości odpowiadają UCS-2 i UCS-4.
The kod ma działać na Pythonie 2.6+.
7 answers
Gdy zbudowany z --enable-unicode=ucs4:
>>> import sys
>>> print sys.maxunicode
1114111
Gdy zbudowany z --enable-unicode=ucs2:
>>> import sys
>>> print sys.maxunicode
65535
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-18 19:33:45
To 0xFFFF (lub 65535) dla UCS-2 i 0x10ffff (lub 1114111) dla 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
}
Maksymalny znak w trybie UCS - 4 jest określony przez wartość maxmimum reprezentowaną w UTF-16.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-18 19:20:44
Miałem kiedyś ten sam problem. Udokumentowałem to dla siebie na mojej wiki pod adresem
Http://arcoleo.org/dsawiki/Wiki.jsp?page=Python%20UTF%20-%20UCS2%20or%20UCS4
Napisałem-
import sys
sys.maxunicode > 65536 and 'UCS4' or 'UCS2'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-20 02:50:11
Sysconfig powie rozmiar unicode ze zmiennych konfiguracyjnych Pythona.
Buildflags można zapytać w ten sposób.
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')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-04 16:40:42
Miałem ten sam problem i znalazłem pół-oficjalny fragment kodu, który robi dokładnie to i może być interesujący dla osób z tym samym problemem: https://bitbucket.org/pypa/wheel/src/cf4e2d98ecb1f168c50a6de496959b4a10c6b122/wheel/pep425tags.py?at=default&fileviewer=file-view-default#pep425tags.py-83:89.
Pochodzi z projektu wheel, który musi sprawdzić, czy python jest skompilowany z ucs-2 lub UCS-4, ponieważ zmieni nazwę wygenerowanego pliku binarnego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-17 07:55:47
Innym sposobem jest utworzenie tablicy Unicode i spojrzenie na itemsize:
import array
bytes_per_char = array.array('u').itemsize
Cytat z array
docs :
Typ
'u'
odpowiada znakowi Unicode Pythona. Na wąskich kompilacjach Unicode jest to 2-bajt, na szerokich kompilacjach jest to 4-bajt.
Zauważ, że rozróżnienie między wąskimi i szerokimi kompilacjami Unicode jest usuwane z Pythona 3.3 dalej, zobacz PEP393 . Kod typowy 'u'
dla {[1] } jest przestarzały od wersji 3.3 i zaplanowany dla usuwanie w Pythonie 4.0.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-07 11:43:04
65535 jest UCS-2:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-18 19:14:20