Crossin的编程教室

标题: 关于“UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in..." [打印本页]

作者: hymyg    时间: 2016-4-26 14:51
标题: 关于“UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in..."
本帖最后由 hymyg 于 2016-5-24 09:09 编辑

  一个程序在本机运行正常,使用py2exe编译成.exe文件在本机运行也正常,将.exe文件发布到其他机器上运行到最后就提示“UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 32: ordinal not in range(128)”,后来发现是编码问题靠成的故障。

原来的代码是:
  1. print('\n'+u'数据整理完毕,共找到'+str(count_no)+u'条记录,已输出到“' +dir_name+'\\'+os.path.splitext(file_name)[0]+u'.fdt”文件中。\n\n按任意键退出程序。\n')
复制代码
修改编码为:
  1. print('\n'+u'数据整理完毕,共找到'+str(count_no)+u'条记录,已输出到“' +dir_name.decode('cp936')+'\\'+os.path.splitext(file_name)[0].decode('cp936')+u'.fdt”文件中。\n\n按任意键退出程序。\n')
复制代码
至此问题解决。

作者: crossin先生    时间: 2016-4-27 13:08
这是python2很容易遇到也很让人头疼的问题。即使加了cp936,也只能保证在windows下运行正常。
作者: hymyg    时间: 2016-5-24 09:09
crossin先生 发表于 2016-4-27 13:08
这是python2很容易遇到也很让人头疼的问题。即使加了cp936,也只能保证在windows下运行正常。 ...

只能增加判断系统的语句,然后根据判断使用代码页,或是直接标明For Windows
作者: crossin先生    时间: 2016-5-24 11:02
hymyg 发表于 2016-5-24 09:09
只能增加判断系统的语句,然后根据判断使用代码页,或是直接标明For Windows ...

也可以用这个
  1. import sys
  2. sys.getfilesystemencoding()
复制代码





欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5