我试图将html实体转换为unichar,html实体是󮠖
当我尝试执行以下操作时:
unichr(int(976918))
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
ValueError: unichr() arg not in range(0x10000) (narrow Python build)
Run Code Online (Sandbox Code Playgroud)
似乎它超出了unichar的范围转换.
Ery*_*Sun 29
您可以\U使用"unicode-escape"编码解码具有Unicode转义的字符串(后跟8个十六进制数字,零填充):
>>> s = "\\U%08x" % 976918
>>> s
'\\U000ee816'
>>> c = s.decode('unicode-escape')
>>> c
u'\U000ee816'
Run Code Online (Sandbox Code Playgroud)
在狭窄的构建中,它存储为UTF-16代理对:
>>> list(c)
[u'\udb7a', u'\udc16']
Run Code Online (Sandbox Code Playgroud)
在编码期间,此代理项对作为代码单元正确处理:
>>> c.encode('utf-8')
'\xf3\xae\xa0\x96'
>>> '\xf3\xae\xa0\x96'.decode('utf-8')
u'\U000ee816'
Run Code Online (Sandbox Code Playgroud)
Mar*_*som 11
这是我用struct模块开发的替代解决方法.
def unichar(i):
try:
return unichr(i)
except ValueError:
return struct.pack('i', i).decode('utf-32')
>>> unichar(int('976918'))
u'\U000ee816'
Run Code Online (Sandbox Code Playgroud)
为了实现这一点,您需要自己构建Python,并指定
./configure --enable-unicode=ucs4
Run Code Online (Sandbox Code Playgroud)
在编译之前,或者你需要转到Python 3.
即使你这样做,Windows上也存在明显的问题,将在下一版本的Python(3.3)中修复.
| 归档时间: |
|
| 查看次数: |
9460 次 |
| 最近记录: |