如何判断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及以上版本上运行。
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