ValueError:unichr()arg不在范围内(0x10000)(窄Python构建)

时间:2011-08-18 10:20:39

标签: python html

我正在尝试将html实体转换为unichar,html实体为󮠖 当我尝试执行以下操作时:

unichr(int(976918))

我收到错误:

ValueError: unichr() arg not in range(0x10000) (narrow Python build)

似乎超出了unichar的范围转换。

3 个答案:

答案 0 :(得分:29)

您可以使用\U编码解码具有Unicode转义符("unicode-escape"后跟8个十六进制数字,零填充)的字符串:

>>> s = "\\U%08x" % 976918
>>> s
'\\U000ee816'

>>> c = s.decode('unicode-escape')
>>> c
u'\U000ee816'

在狭窄的构建中,它存储为UTF-16代理对:

>>> list(c)
[u'\udb7a', u'\udc16']

此代理项对在编码期间作为代码单元正确处理:

>>> c.encode('utf-8')
'\xf3\xae\xa0\x96'

>>> '\xf3\xae\xa0\x96'.decode('utf-8')
u'\U000ee816'

答案 1 :(得分:10)

这是我使用struct模块开发的替代解决方法。

def unichar(i):
    try:
        return unichr(i)
    except ValueError:
        return struct.pack('i', i).decode('utf-32')

>>> unichar(int('976918'))
u'\U000ee816'

答案 2 :(得分:6)

为了实现这一点,您需要自己构建Python,指定

./configure --enable-unicode=ucs4

在编译之前,否则你需要转到Python 3。

即使你这样做,Windows上也显然存在问题,将在下一版本的Python(3.3)中修复。