我正在尝试将html实体转换为unichar,html实体为󮠖
当我尝试执行以下操作时:
unichr(int(976918))
我收到错误:
ValueError: unichr() arg not in range(0x10000) (narrow Python build)
似乎超出了unichar的范围转换。
答案 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)中修复。