美文网首页
Python3 UnicodeEncodeError解决

Python3 UnicodeEncodeError解决

作者: PythonDeveloper | 来源:发表于2016-08-10 14:35 被阅读349次

    在升级到EL Capitan后,SSH到远端的Server,运行Python脚本处理数据。结果脚本报告出现异常:

    UnicodeEncodeError: 'ascii' codec can't encode characters in position 18-21: ordinal not in range(128)
    

    出现异常的地方是如下代码:

    print(app[‘name’], file=f) # 将app的名称(可能含有中文)打印到文件中。
    

    脚本没有改动过,怎么会出现UnicodeEncodeError呢?肯定是和系统升级有关。Google搜索时发现了下面这篇有用的Blog

    系统升级后locale设置有所变化:LANG和LC_CTYPE变为了en_AU.UTF-8。当ssh到server时,会把locale信息传给sshd,然后sshd根据locale信息来设置ssh session,由此会影响python的编解码。sys.stdout.encoding自动设置为'ANSI_X3.4-1968’。

    SSH时使用“-vvv”选项打印出Debug信息后,发现果然会传locale信息。

    debug1: Sending env LC_CTYPE = en_AU.UTF-8
    

    解决方法就是在bashrc或bash_profile中更新如下环境变量,使SSH客户端和服务器端保持一致:

    export LANG=en_US.UTF-8
    export LC_CTYPE=en_US.UTF-8
    export LC_ALL=en_US.UTF-8
    

    相关文章

      网友评论

          本文标题:Python3 UnicodeEncodeError解决

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