Windows环境下将Python UTF-8标准输出重定向到文件时出现错误
解决PowerShell中Python重定向输出UTF-8字符的编码错误
这个问题我之前也踩过坑,本质是PowerShell默认的输出编码不是UTF-8,而Python在重定向标准输出时,会默认使用系统控制台的编码(也就是charmap),导致像\u2714(✓)这类特殊字符无法被编码。下面给你几个实用的解决办法:
方法1:在Python代码中强制指定输出编码为UTF-8
如果可以修改代码的话,直接让Python的标准输出使用UTF-8编码,这样不管是控制台输出还是重定向到文件都不会有问题:
import sys # 重新配置标准输出的编码为UTF-8 sys.stdout.reconfigure(encoding='utf-8') print("\u2714")
执行原命令python3 .\test.py > test.txt就能正常生成UTF-8编码的文件了。
方法2:通过环境变量让Python强制使用UTF-8
如果你不想修改代码,可以在PowerShell中先设置Python的环境变量,开启UTF-8全局支持(Python 3.7及以上版本支持):
$env:PYTHONUTF8=1 python3 .\test.py > test.txt
这个环境变量会让Python默认用UTF-8处理所有标准输入、输出和错误流,完美适配重定向场景。
方法3:用PowerShell的Out-File命令指定编码
另一种思路是让PowerShell来处理编码转换,用Out-File替代重定向符号,并明确指定UTF-8编码:
python3 .\test.py | Out-File -Encoding utf8 test.txt
这种方法不需要修改代码,也不用设置环境变量,直接通过PowerShell的命令完成编码转换。
内容的提问来源于stack exchange,提问作者flsflsfls




