zoukankan      html  css  js  c++  java
  • [python3]未配置locale的主机出现UnicodeDecodeError: 'ascii' codec can't decode byte 0x....的解决

    之前写的发邮件的程序部署到vps的时候出现了 UnicodeDecodeError: 'ascii' codec can't decode byte 0x.... 的错误。
    按理说UnicodeDecodeError是python2才有的错误,这在python3出现是什么情况?

    根据报错观察代码,发现打开文件的时候没指定encoding,于是指定'utf-8',改成这样:

    with open(mail_html, 'r', encoding='utf-8') as f:
        template = f.read()
    

    改完之后还是这个错误,但是byte 0xe6 变成了别的值,说明指定编码是有效的(在没指定locale的主机上居然按ascii读取文件???!! Σ( ° △ °|||)︴)

    问题还没完全解决,网上查了些资料,基本都是复制粘贴,看起来也没什么价值。

    再仔细想想,因为代码调用了print,那会不会是stdout不支持中文显示?
    于是找到之前看到的一段导入codecs设置stdout相关的代码:

    import sys
    import codecs
    sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
    

    这样设置之后,的确OK了。


    > 更新相关内容: > https://blog.lilydjwg.me/2016/10/21/set-stdout-encoding-in-python.206653.html
  • 相关阅读:
    expect 函数体 花括号
    bash 连接字符串
    Ubuntu下搭建Python开发环境
    expect
    >&2
    expect语法基础: while、for 循环、if 语句的用法示例
    bash exit
    python开发工具
    eclipse中安装adt出现了duplicate location错误怎样解决
    shell source
  • 原文地址:https://www.cnblogs.com/dylanchu/p/11141416.html
Copyright © 2011-2022 走看看