簡體   English   中英

如何確定Python是用UCS-2還是UCS-4編譯的?

[英]How to find out if Python is compiled with UCS-2 or 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+。

使用--enable-unicode = ucs4構建時:

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

使用--enable-unicode = ucs2構建時:

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

UCS-2為0xFFFF(或65535),UCS-4為0x10FFFF(或1114111):

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中可表示的maxmimum值定義。

我有過同樣的問題一次。 我在我的wiki上為自己記錄了這個

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

我寫 -

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

sysconfig將從python的配置變量中告訴unicode大小。

可以像這樣查詢構建標志。

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

我遇到了同樣的問題,並發現了一個半官方的代碼,它確實可以解決同樣的問題: https//bitbucket.org/pypa/wheel/src/cf4e2d98ecb1f168c50a6de496959b4a10c6b122/wheel/pep425tags.py ?at = default&fileviewer = file-view-default#pep425tags.py-83:89

它來自wheel項目,它需要檢查python是否使用ucs-2或ucs-4編譯,因為它將更改生成的二進制文件的名稱。

另一種方法是創建一個Unicode數組並查看itemsize:

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

array文檔引用:

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

請注意,從3.3之后的版本中刪除了窄版本和寬版本之間的區別,請參閱PEP393 array'u'類型代碼自3.3以來不推薦使用,並計划在Python 4.0中刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM