首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python3解码二进制文件中的希腊字母

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

Stack Overflow用户
提问于 2018-07-07 01:41:07
回答 2查看 634关注 0票数 0

我有一个二进制文件,并希望读取和解码该文件。该文件对每个字符使用一个字节。我在用希腊字母解码部分时出错。由于我不能共享该文件,因此您可以使用下面的示例代码进行自己的测试。问题出在UnicodeDecodeError。

代码语言:javascript
复制
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

解决方案:

代码语言:javascript
复制
data = b'a5\xb5'
data.decode("windows-1252")
'a5µ'
EN

回答 2

Stack Overflow用户

发布于 2018-07-07 01:50:30

您正在读取的是unicode字符串,而不是UTF8字节字符串:

代码语言:javascript
复制
# UTF8 bytestring
data = b'\xc2\xb5'
data.decode("utf-8")
>>> 'µ'

代码语言:javascript
复制
# Unicode string:
data = '\xb5'
data
>>> 'µ'

您应该这样打开您的文件(在python 3中,如果您提供编码,文件将自动解码为unicode (文本)):

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-07-07 09:30:41

需要正确的解码。

代码语言:javascript
复制
data = b'a5\xb5'
data.decode("windows-1252")
'a5µ'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51215402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档