Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pefile返回unicodeDecodeError_Python_Python 2.7 - Fatal编程技术网

Python 使用pefile返回unicodeDecodeError

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

我已经导入了pefile,并使用它从StringTable属性获取条目

我得到以下错误:

“ascii”编解码器无法解码第9位的字节0xc2:序号不在范围内(128)
回溯(最后一次调用):文件“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
,因此会出现错误。但是如果没有一个标记,很难再进一步追踪它。