64

就像标题所说的那样。

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

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

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

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

该代码预计可在 Python 2.6+ 上运行。

4

7 回答 7

126

使用 --enable-unicode=ucs4 构建时:

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

使用 --enable-unicode=ucs2 构建时:

>>> import sys
>>> print sys.maxunicode
65535
于 2009-09-18T19:33:45.007 回答
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 中可表示的最大值定义。

于 2009-09-18T19:20:44.260 回答
11

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

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

我写 -

import sys
sys.maxunicode > 65536 and 'UCS4' or 'UCS2'
于 2009-09-20T02:50:11.820 回答
10

sysconfig将从 python 的配置变量中告诉 unicode 大小。

可以像这样查询构建标志。

蟒蛇 2.7:

import sysconfig
sysconfig.get_config_var('Py_UNICODE_SIZE')

蟒蛇2.6:

import distutils
distutils.sysconfig.get_config_var('Py_UNICODE_SIZE')
于 2016-03-04T16:40:42.333 回答
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 编译的,因为它会更改生成的二进制文件的名称。

于 2016-08-17T07:28:02.563 回答
1

另一种方法是创建一个 Unicode 数组并查看项目大小:

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

array文档中引用:

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

请注意,窄 Unicode 构建和宽 Unicode 构建之间的区别从 Python 3.3 开始被删除,请参阅PEP393。的'u'类型代码array自 3.3 起已弃用,并计划在 Python 4.0 中删除。

于 2016-09-07T11:28:30.143 回答
0

65535 是 UCS-2:

因此,代码点 U+0000 被编码为数字 0,而 U+FFFF 被编码为 65535(十六进制为 FFFF16)。

于 2009-09-18T19:14:20.490 回答