我有一个二进制文件,并且想要读取和解码该文件。该文件为每个字符使用一个字节。用希腊字母解码部分时出现错误。由于我无法共享文件,因此您可以使用下面的示例代码进行自己的测试。问题是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µ'
答案 0 :(得分:1)
您正在读取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
答案 1 :(得分:0)
需要正确的解码。
data = b'a5\xb5'
data.decode("windows-1252")
'a5µ'