我有一个二进制文件,并希望读取和解码该文件。该文件对每个字符使用一个字节。我在用希腊字母解码部分时出错。由于我不能共享该文件,因此您可以使用下面的示例代码进行自己的测试。问题出在UnicodeDecodeError。
data = b'a5'
data.decode("utf-8")
'a5'
data = b'a5\xb5'
data.decode("utf-8")
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5
解决方案:
data = b'a5\xb5'
data.decode("windows-1252")
'a5µ'
发布于 2018-07-07 01:50:30
您正在读取的是unicode字符串,而不是UTF8字节字符串:
# UTF8 bytestring
data = b'\xc2\xb5'
data.decode("utf-8")
>>> 'µ'
# Unicode string:
data = '\xb5'
data
>>> 'µ'
您应该这样打开您的文件(在python 3中,如果您提供编码,文件将自动解码为unicode (文本)):
with open(filename, encoding='utf8') as f:
f.seek(24, 0)
datastr_size = unpack('B', f.read(1))[0]
datastr = ""
for i in range(datastr_size):
data = unpack('c', f.read(1))[0] #decode("utf-8") not needed
datastr += data
datastr
发布于 2018-07-07 09:30:41
需要正确的解码。
data = b'a5\xb5'
data.decode("windows-1252")
'a5µ'
https://stackoverflow.com/questions/51215402
复制相似问题