Windows下Python管道输出到文件时UnicodeEncodeError问题解决
解决Windows下Python管道输出Unicode字符的编码错误
为什么会报错?
Windows终端直接打印时,Python会适配终端支持的编码(通常是UTF-8或GBK),但用管道输出到文件时,系统默认会用老旧的ANSI编码(比如cp1252),这类编码不支持像📂这类emoji字符,所以触发UnicodeEncodeError。
下面是几种可行的解决办法:
方法1:设置PYTHONIOENCODING环境变量
直接告诉Python用UTF-8编码处理标准输出,这是最简单的方案:
# 先设置环境变量,再执行命令 set PYTHONIOENCODING=utf-8 python -c "print('📂')" > log.txt
或者合并成一行执行:
PYTHONIOENCODING=utf-8 python -c "print('📂')" > log.txt
方法2:直接写入UTF-8编码的字节流
绕过系统默认编码,手动把字符转成UTF-8字节后写入标准输出:
python -c "import sys; sys.stdout.buffer.write('📂'.encode('utf-8') + b'\n')" > log.txt
这里加b'\n'是因为print默认会自动加换行,直接写字节流需要手动补充。
方法3:在代码中重定向标准输出编码
如果是写Python脚本而非单行命令,可以在脚本里重新指定标准输出的编码:
import sys import codecs # 重新设置标准输出为UTF-8编码 sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach()) print('📂')
然后执行脚本并输出到文件:
python script.py > log.txt
内容的提问来源于stack exchange,提问作者Michael B. Currie
相关产品推荐
相关产品推荐

