7

十六进制字符串'\xd3'也可以表示为:Ó.

我发现将十六进制字符串的字符表示到控制台的最简单方法是:

print unichr(ord('\xd3'))

或者用英语,将十六进制字符串转换为数字,然后将该数字转换为 unicode 代码点,最后将其输出到屏幕上。这似乎是一个额外的步骤。有没有更简单的方法?

4

3 回答 3

12
print u'\xd3'

是你所要做的。你只需要以某种方式告诉 Python 它是一个 unicode 文字;领导u这样做。它甚至适用于多个角色。

如果您不是在谈论文字,而是在谈论变量:

codepoints = '\xd3\xd3'
print codepoints.decode("latin-1")

编辑:如果与您的终端编码不兼容,则在 ing 时指定特定编码print将不起作用,因此printencode(sys.stdout.encoding)自动执行。谢谢@ThomasK。

于 2011-08-09T16:57:17.917 回答
0

如果数据是这样的"\xe0\xa4\xb9\xe0\xa5\x88\xe0\xa4\xb2\xe0\xa5\x8b \xe0\xa4\x95\xe0\xa4\xb2"

sys.stdout.buffer.write(data) 

会打印

हैलो कल
于 2019-12-18T06:13:05.413 回答
0

不久前,我遇到了一个非常相似的问题。我必须解码包含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 |
于 2021-09-16T13:58:09.637 回答