2009-09-18 138 views
55

正是標題所說的。如何找出Python是否使用UCS-2或UCS-4進行編譯?

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

搜索的官方文檔,我發現這一點:

sys.maxunicode:一個整數,一個 Unicode字符的 最大支持的代碼點。此 的取決於配置選項 ,該選項指定是否將Unicode 字符存儲爲UCS-2或 UCS-4。

這裏不清楚的是 - 哪些值對應於UCS-2和UCS-4。

該代碼預計適用於Python 2.6+。

回答

101

當--enable-unicode的= UCS4建:

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

當--enable-unicode的UCS2 =建:

>>> import sys 
>>> print sys.maxunicode 
65535 
+2

這對於Python 3來說並不是普遍正確的。請參閱https://docs.python.org/3.4/c-api/unicode.html:自Python 3.3中實現PEP 393以來,Unicode對象在內部使用各種各樣的表示'。 https://www.python.org/dev/peps/pep-0393/ – 2015-10-12 09:40:15

+2

@ Jan-PhilipGehrcke:'weakient_unicode_build =(sys.maxunicode <0x10ffff)'適用於任何Python版本(即使使用靈活的內部表示法'sys.maxunicode == 0x10ffff')。靈活的表示方式可以獲得正確的結果,例如ucs4在以前的版本中所做的,同時在某些情況下使用的內存少於ucs4。 – jfs 2016-03-05 19:11:44

18

這是爲0xFFFF(或65535),用於UCS-2,和在0x10FFFF(或1114111),用於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 
} 

UCS-4模式下的最大字符由可用UTF-16表示的最大值定義。

4

sysconfig將蟒蛇的配置變量告訴unicode的大小。

可以像這樣查詢buildflags。

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

另一種方法是創建一個統一陣列,並期待在itemsize:從array docs

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

報價:

'u'類型代碼對應於Python的Unicode字符。在狹窄的Unicode版本中,這是2字節,在寬版本上是4字節。

注意,窄帶和寬帶Unicode之間的區別是建立在Python 3.3起下降,看PEP393'u'array的typecode自3.3起棄用,並計劃在Python 4.0中刪除。

相關問題