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

解决“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吧。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆嵩

有打赏才有动力,你懂的。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值