事故现象:python2.7下,脚本执行报错:UnicodeEncodeError: 'ascii' codec can't encode,代码中所有的print带有非英文的,或字符串连接+ 带有非英文的,或os.filepath文件路径中带有非英文的 都会出现这个字符编码错误
刚开始还以为是python问题,各种搜索,网上大部分都是在py文件顶部加:
import sys
reload(sys)
sys.setdefaultencoding( “utf-8” )
或是在python的Lib\site-packages文件夹下新建一个sitecustomize.py,内容为:
# encoding=utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
然一切做下来并没有什么卵用,直接在命令行中查看python的编码如下:
[root@vmi442840 ~]# python
Python 2.7.5 (default, Nov 16 2020, 22:23:17)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>>
对,这就是python的默认编码方式ascii,不要尝试手贱去更改。
最后发现ssh登陆Centos7时有个提示:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
一查发现原因是没有utf-8这个语系(没添加语言_国名前缀),LC_ALL又没设定值。
解决办法:
在服务器的 /etc/environment 加入以下两行(此时查看这个environment文件竟然是个空文件),重新登陆即可:
LANG=en_US.utf-8
LC_ALL=en_US.utf-8
处理这个问题之后,再运行python的脚本,发现不报错了,但要是主动出现这样的代码: 也还是会报编码错误
print seoName + '这是个中文'
此时只需要在中文字符串之前加一个‘u’字符即可:
print seoName + u'这是个中文'
网友评论