如何在Powershell中将程序非ASCII输出保存为UTF-8编码文件
解决方案
问题根因
PowerShell捕获外部程序的标准输出时,默认使用系统OEM代码页解码字节流,而你的Go、Python程序输出的是UTF-8编码字符,第一步解码错误就会导致后续无论用什么编码存文件都显示乱码。Python额外存在适配逻辑:检测到输出被重定向/管道传输时,默认不会输出UTF-8编码,需要通过环境变量强制指定输出编码。
临时生效(单次PowerShell会话可用)
打开PowerShell后先执行以下2条配置命令,再运行你的程序写入操作即可正常输出:
# 强制Python输出UTF-8编码内容,无需修改源代码 $env:PYTHONIOENCODING = 'utf-8' # 告诉PowerShell使用UTF-8解码外部程序的输出 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
后续你就可以正常使用命令写入UTF-8文件:
- 写入Python输出:
python hello.py | Out-File -Encoding UTF8 file2.txt - 写入Go输出:
go run hello.go | Out-File -Encoding UTF8 file5.txt
如果不想修改当前会话的全局配置,也可以直接调用cmd执行重定向操作,适合临时使用: - 写入Python输出:
cmd /c "set PYTHONIOENCODING=utf-8 && python hello.py > file1.txt" - 写入Go输出:
cmd /c "go run hello.go > file4.txt"
永久生效(所有PowerShell会话自动配置)
- 执行命令打开PowerShell配置文件:
notepad $PROFILE,如果提示文件不存在,选择新建即可。 - 将以下配置写入文件后保存:
$env:PYTHONIOENCODING = 'utf-8' [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 # 可选配置:将Out-File和重定向符>的默认输出编码设为UTF-8 $PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
- 重启所有PowerShell窗口,配置自动生效,无需每次手动执行配置命令。
注:以上配置同时兼容PowerShell 5.1和PowerShell 7.x所有版本。
内容的提问来源于stack exchange,提问作者Karol Zlot
相关产品推荐
相关产品推荐

