UnicodeDecodeError: 'ascii' codec can't decode byte 0xa7 in position 0: not in ordinal range (128)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa7 in position 0: not in ordinal range (128)
我有一个十六进制字符串,表示为包含一些文本的单个字符列表。当我尝试用以下方法解码十六进制时:
for counter, i in enumerate(hexadecimal):
if counter % 2 == 0:
pass
else:
temp_list = hexadecimal[counter:counter + 2]
hex_string = ''.join(str(x) for x in temp_list)
bytes_string = bytes.fromhex(hex_string)
ascii_text += bytes_string.decode('ascii')
它工作正常但是当它遇到数字 ['A', 7] 时它给我这个错误。
我认为这是因为 ASCII 中不存在该字符,我如何从中创建可读字符?
编辑:
一个示例输入是 [6, 1, 6, 2, 6, 3]
,它产生 abc
作为输出。
程序输入是 [0, 'F', 3, 4, 3, 0, 2, 'E', 3, 0, 3, 1, 5, 6, 2, 0, 3, 4, 3, 7, 3, 2, 3, 3, 4, 1, 4, 1, 3, 3, 5, 1]
产生 40.01V 4723AA3Q
如果您希望能够将任何字节表示为可接受的字符,您应该使用 Latin-1 或 ISO-8859-1 编码(2 个名称但字符集相同)。接受任何字节,即使有些字节不是可打印的字符。表示是相同值的unicode字符(当然最多255个)如果存在的话。
对于你的问题,'\xa7'
将是 unicode 字符 U+00A7 SECTION SIGN §
。
因此,您只需将最后一行更改为:
ascii_text += bytes_string.decode('Latin1')
我有一个十六进制字符串,表示为包含一些文本的单个字符列表。当我尝试用以下方法解码十六进制时:
for counter, i in enumerate(hexadecimal):
if counter % 2 == 0:
pass
else:
temp_list = hexadecimal[counter:counter + 2]
hex_string = ''.join(str(x) for x in temp_list)
bytes_string = bytes.fromhex(hex_string)
ascii_text += bytes_string.decode('ascii')
它工作正常但是当它遇到数字 ['A', 7] 时它给我这个错误。 我认为这是因为 ASCII 中不存在该字符,我如何从中创建可读字符?
编辑:
一个示例输入是 [6, 1, 6, 2, 6, 3]
,它产生 abc
作为输出。
程序输入是 [0, 'F', 3, 4, 3, 0, 2, 'E', 3, 0, 3, 1, 5, 6, 2, 0, 3, 4, 3, 7, 3, 2, 3, 3, 4, 1, 4, 1, 3, 3, 5, 1]
产生 40.01V 4723AA3Q
如果您希望能够将任何字节表示为可接受的字符,您应该使用 Latin-1 或 ISO-8859-1 编码(2 个名称但字符集相同)。接受任何字节,即使有些字节不是可打印的字符。表示是相同值的unicode字符(当然最多255个)如果存在的话。
对于你的问题,'\xa7'
将是 unicode 字符 U+00A7 SECTION SIGN §
。
因此,您只需将最后一行更改为:
ascii_text += bytes_string.decode('Latin1')