Python 使用pefile返回unicodeDecodeError
我已经导入了pefile,并使用它从StringTable属性获取条目 我得到以下错误: “ascii”编解码器无法解码第9位的字节0xc2:序号不在范围内(128)Python 使用pefile返回unicodeDecodeError,python,python-2.7,Python,Python 2.7,我已经导入了pefile,并使用它从StringTable属性获取条目 我得到以下错误: “ascii”编解码器无法解码第9位的字节0xc2:序号不在范围内(128) 回溯(最后一次调用):文件“peinfo.py”,第74行,在getPeInfo ans.append(“产品名称:{}”格式中(将\u转换为\u可打印(st\u entry.entries.get('ProductName','none'))) UnicodeDecodeError:“ascii”编解码器无法解码第9位的字节0x
回溯(最后一次调用):文件“peinfo.py”,第74行,在getPeInfo ans.append(“产品名称:{}”格式中(将\u转换为\u可打印(st\u entry.entries.get('ProductName','none')))
UnicodeDecodeError:“ascii”编解码器无法解码第9位的字节0xc2:序号不在范围内(128) 我的改动要点如下:
def getPeInfo(filename):
ans = []
try:
pe = pefile.PE(filename, fast_load=True)
except:
return "PE header not found."
pe.parse_data_directories( directories=[
pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_IMPORT'],
pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_RESOURCE'],
])
ans.append("\n [[ File Info]]")
if hasattr(pe, 'FileInfo'):
if type(pe.FileInfo) == type([]):
entry = pe.FileInfo[0]
if hasattr(entry, 'StringTable'):
st_entry = entry.StringTable[0]
ans.append("Product Name : {}".format(convert_to_printable(st_entry.entries.get('ProductName', 'none'))))
这是一个相当大的表达式,有很多地方可能会出错。你能把它分成一系列单独的行,每个行执行一个步骤,看看哪一个步骤会引发异常吗?不管怎样,当你没有在任何地方显式调用
decode
,也没有在已经是str
的东西上调用encode
这样愚蠢的操作时,该错误通常意味着您试图在同一个表达式中同时使用str
和unicode
,无论是x.format(y)
,x+y
,等等。当您这样做时,Python会自动调用str
上的decode()
,它使用您的默认编码,这通常是ascii
,因此会出现错误。但是如果没有一个标记,很难再进一步追踪它。