美文网首页
记一次Centos7 环境下Python2.7事故

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

作者: D_8270 | 来源:发表于2020-12-31 17:04 被阅读0次

    事故现象: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事故

          本文链接:https://www.haomeiwen.com/subject/qfkroktx.html