记一次Centos7 环境下Python2.7事故

事故现象: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'这是个中文'

你可能感兴趣的:(记一次Centos7 环境下Python2.7事故)