如何判断Python是用UCS-2还是UCS-4编译的?

64 投票
7 回答
43304 浏览
提问于 2025-04-15 14:25

标题说的就是这个。

$ ./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 个回答

11

我之前也遇到过这个问题。为了自己记住,我在我的维基上做了记录,地址是:

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

我写了:

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

在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中可以表示的最大值来决定的。

129

当使用 --enable-unicode=ucs4 这个选项构建时:

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

当使用 --enable-unicode=ucs2 这个选项构建时:

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

撰写回答