Python3解码二进制文件中的希腊字母

时间:2018-07-06 17:41:07

标签: python python-3.x decode binaryfiles

我有一个二进制文件,并且想要读取和解码该文件。该文件为每个字符使用一个字节。用希腊字母解码部分时出现错误。由于我无法共享文件,因此您可以使用下面的示例代码进行自己的测试。问题是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µ'

2 个答案:

答案 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µ'