如何确定Python是用UCS-2还是UCS-4编译的?

时间:2009-09-18 19:06:49

标签: python unicode ucs2

正如标题所说的那样。

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

正在搜索官方文档,我发现了这个:

  

sys.maxunicode :给出的整数   支持的最大代码点   Unicode字符。   取决于配置选项   指定是否为Unicode   字符存储为UCS-2或   UCS-4。

这里不清楚的是 - 哪些值对应于UCS-2和UCS-4。

该代码预计适用于Python 2.6 +。

7 个答案:

答案 0 :(得分:118)

使用--enable-unicode = ucs4:

构建时
>>> import sys
>>> print sys.maxunicode
1114111

使用--enable-unicode = ucs2:

构建时
>>> import sys
>>> print sys.maxunicode
65535

答案 1 :(得分:19)

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值定义。

答案 2 :(得分:11)

我曾经遇到过同样的问题。我在我的维基上为自己记录了

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

我写了 -

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

答案 3 :(得分:8)

sysconfig将告诉python的配置变量中的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')

答案 4 :(得分:1)

我遇到了同样的问题,并发现了一个半官方的代码,它确实可以解决同样问题的人: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编译,因为它将更改生成的二进制文件的名称。

答案 5 :(得分:1)

另一种方法是创建一个Unicode数组并查看itemsize:

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

来自array docs

的引用
  

'u'类型代码对应于Python的unicode字符。在窄的Unicode版本中,这是2字节,在宽版本上,这是4字节。

请注意,从3.3之后的版本中删除了窄版和宽版Unicode之间的区别,请参阅PEP393。自{3.3}以来,'u' array的类型代码已弃用,并计划在Python 4.0中删除。

答案 6 :(得分:0)