十六进制字符串'\xd3'
也可以表示为:Ó
.
我发现将十六进制字符串的字符表示到控制台的最简单方法是:
print unichr(ord('\xd3'))
或者用英语,将十六进制字符串转换为数字,然后将该数字转换为 unicode 代码点,最后将其输出到屏幕上。这似乎是一个额外的步骤。有没有更简单的方法?
print u'\xd3'
是你所要做的。你只需要以某种方式告诉 Python 它是一个 unicode 文字;领导u
这样做。它甚至适用于多个角色。
如果您不是在谈论文字,而是在谈论变量:
codepoints = '\xd3\xd3'
print codepoints.decode("latin-1")
编辑:如果与您的终端编码不兼容,则在 ing 时指定特定编码print
将不起作用,因此print
请encode(sys.stdout.encoding)
自动执行。谢谢@ThomasK。
如果数据是这样的"\xe0\xa4\xb9\xe0\xa5\x88\xe0\xa4\xb2\xe0\xa5\x8b \xe0\xa4\x95\xe0\xa4\xb2"
sys.stdout.buffer.write(data)
会打印
हैलो कल
不久前,我遇到了一个非常相似的问题。我必须解码包含unicode hex(例如,_x0023_
)而不是特殊字符(例如,#
)的文件。解决方案在以下代码中描述:
from collections import OrderedDict
import re
def decode_hex_unicode_to_latin1(string: str) -> str:
hex_unicodes = list(OrderedDict.fromkeys(re.findall(r'_x[?:\da-zA-Z]{4}_', string)))
for code in hex_unicodes:
char = bytes.fromhex(code[2:-1]).decode("latin1")[-1]
string = string.replace(code, char)
return string
def main() -> None:
string = "|_x0020_C_x00f3_digo_x0020_|"
decoded_string = decode_hex_unicode_to_latin1(string)
print(string, "-->", decoded_string)
return
if __name__ == '__main__':
main()
|_x0020_C_x00f3_digo_x0020_| --> | Código |