[python3]未配置locale的主机出现UnicodeDecodeError: 'ascii' codec can't decode byte 0x....的解决
2024-10-07 17:52:52
之前写的发邮件的程序部署到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
最新文章
- PHP练习题
- 【PCB】电子元件封装大全及封装常识
- Quartus II 与 Modelsim 联调【转】
- Python全栈开发day9
- Position、Float
- linux MTD系统解析(转)
- Java使用泛型类来提高方法的可重用性
- Codeforces Round #209 (Div. 2)
- 在Linux下如何用Shell脚本读写XML?现有一个config.xml(转)
- r语言之生成随机序列,随机数生成函数及用法
- MalformedObjectNameException: Invalid character '' in value part of property
- [05] Session概要
- 什么时候可以用delete替代delete[]
- python端口扫描器
- c# 日期函数DateTime.ToString()日期的各种格式
- Dubbo 源码分析 - 集群容错之 Directory
- IP地址分类以及子网划分
- OS之内存管理 --- 虚拟内存管理(一)
- libev与libevent区别
- JavaScript 如何从引用类型(Array 、 Object)创建一个新的对象