您的位置:首页 > 其它

解决“UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 3: ordinal not in range(128”

2017-03-17 17:01 591 查看

解决“UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xd7 in position 3: ordinal not in range(128)”一类问题的新方法

问题是出来用pyinstaller转py为exe文件时出现的报错,如果是在ide中出错,就可以绕道他处寻解了,与之无关。

不晓得现在还有没有人使用py2exe工具,py2exe不更新了,使用的时候特别容易出问题,动则什么文件什么依赖包就找不到了,手工都找不到。所以,当你用py2exe时,遇到了问题,五分钟解决不了,就赶紧转用其他工具,比如pyinstaller,不要再纠结了。

当用pyinstaller时,有时会出现如下报错:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 3: ordinal not in range(128)


当然有可能,这里的byte不一样,position更有可能不一样。

这时候,不要慌张去百度后按部就班去做什么的(无非就是在文件头部加个判断转换之类的),大多数情况下,你这里的position和byte和人家的不一定一样,你照做了,固然还是有这个问题。

这时候你要做的是,认真地分析命令行的提示,

Traceback
往往给出了你出错前程序封装过程的最近十几个轨迹,将轨迹的最后一个,也就是
UnicodeDecodeError
错误提示的上面几行给出的运行到的位置。如:

File "D:\Python27\lib\site-packages\PyInstaller\utils\win32\winmanifest.py", line 721, in load_dom
(self.filename, manifest.name))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 3: ordinal not in range(128)


把错误文件,对应的python代码部分找出来,再根据报错信息想办法进行修改,不知道这么修改,这时候就可以百度了。

比如说我找到了这个位置,错误提示说“ascii”不能解码,说明这部分代码所用的命令让它解码出错了。我分析了一下,给两个变量加个个
str()
,不让他误解码,问题就解决了。

(str(self.filename), str(manifest.name)))


遇到问题一定要静下心来,认真分析,不要像无头苍蝇似了,复制黏贴错误信息到浏览器,乱试别人的解决方法。知其然不知所以然,最后只会一团糟。

有人说py2exe太过陈旧缺少维护操作不便,推荐PyInstaller项目 www.pyinstaller.org可用一句命令打包:

pyinstaller -F -w -i manage.ico app.py
-F:打包为单文件
-w:Windows程序,不显示命令行窗口
-i:是程序图标
app.py是你要打包的py文件


另外需要pywin32。安装方法:先跑
pip install pywin32
再跑
pip install pyinstaller
即可,多么简单。所以,尽快方法,使用麻烦,又容易出错的py2exe吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐