将字节序列解码为Unicode字符串

4 投票
2 回答
55 浏览
提问于 2025-04-14 16:22

我正在尝试使用Python中的pefile库,将不同类型的文件(比如.exe、.dll和.deb文件)中的字节序列解码成Unicode字符串。不过,有时候我会遇到Unicode解码错误。我该如何有效地处理这些错误呢?

以下是相关的代码片段:

import pefile

def get_section_addresses(file_path):
    section_addresses = {}
    pe = pefile.PE(file_path)
    for section in pe.sections:
        section_addresses[section.Name.decode().strip('\x00')] = section.VirtualAddress
    return section_addresses

section_addresses = get_section_addresses('D:/Binary/file/rufus.exe')
for name, address in section_addresses.items():
    print(f"{name}:{address:08X}")

我正在使用pefile来解析可移植执行文件(PE文件),提取各个部分的名称和它们对应的虚拟地址。但是,在解码部分名称时,我有时会遇到Unicode解码错误。

2 个回答

3

你可以指定编码方式,并尝试忽略错误。

section.Name.decode('utf-8', errors = 'ignore').strip('\x00')
3

我使用嵌套的try-except块来实现错误处理。

 try:
    pe = pefile.PE(file_path)
    for section in pe.sections:
        try:
            name = section.Name.decode().strip('\x00')
        except UnicodeDecodeError:
            name = "Undecodable"
        section_addresses[name] = section.VirtualAddress
except pefile.PEFormatError:
    print(f"Error: {file_path} is not a valid PE file.")
return section_addresses

撰写回答