我正在尝试用平面文件写出一些中文,俄文或各种非英文字符集用于测试目的。我对如何将Unicode十六进制或十进制值输出到其对应的字符感到困惑。
例如在Python中,如果您有一组硬编码的字符集,例如абвгдежзийкл
,您将分配value = u"абвгдежзийкл"
并且没有问题。
但是,如果你有一个十进制或十六进制十进制,如1081/0439存储在一个变量中,你想用它的相应实际字符打印出来(而不仅仅是输出0x439),这将如何完成?上面的Unicode十进制/十六进制值是指й
。
答案 0 :(得分:20)
答案 1 :(得分:1)
所以问题的答案是:
int(hex_value, 16)
chr()
获得相应的strin。总结一下:
>>> print(chr(int('0x897F', 16)))
西
答案 2 :(得分:0)
如果您遇到错误:
ValueError:unichr()arg不在范围内(0x10000)(缩小Python构建)
尝试使用unichr
转换十六进制值时,您可以通过执行以下操作来解决该错误:
>>> n = int('0001f600', 16)
>>> s = '\\U{:0>8X}'.format(n)
>>> s
'\\U0001F600'
>>> binary = s.decode('unicode-escape')
>>> print(binary)
答案 3 :(得分:0)
在处理包含解析JSON的项目时,我遇到了类似的问题。我有很多字符串,所有非ASCII字符都这样逃脱了:
>>> print(content)
\u0412\u044B j\u0435\u0441\u0442\u0435 \u0438\u0437 \u0420\u043E\u0441\u0441\u0438\u0438?
...
>>> print(content)
\u010Cemu jesi na\u010Dinal izu\u010Dati med\u017Euslovjansky jezyk?
用unichr()
逐个符号地转换这样的混合将是乏味的。我最终决定采用的解决方案:
content.encode("utf8").decode("unicode-escape")
第一个操作(编码)产生如下字节串:
b'\\u0412\\u044B j\\u0435\\u0441\\u0442\\u0435 \\u0438\\u0437 \\u0420\\u043E\\u0441\\u0441\\u0438\\u0438?'
b'\\u010Cemu jesi na\\u010Dinal izu\\u010Dati med\\u017Euslovjansky jezyk?'
和第二个操作(解码)将字节字符串转换为Unicode字符串,但用\\
替换了\
,从而“解包”了字符,给出了如下结果:
Вы jесте из России?
Čemu jesi načinal izučati medžuslovjansky jezyk?