You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows PowerShell中Python print遇|或>触发编码错误的问题求助

中文Windows PowerShell中Python输出重定向Unicode编码问题解决

问题场景

在中文Windows系统的PowerShell环境下,执行以下Python脚本test.py:

# -*- coding: utf-8 -*-
print("Er, Süleyman")

直接运行python test.py时能正常输出Er, Süleyman,但执行重定向命令python test.py > tmp.txt,或者管道输出到Out-File(python test.py | Out-File -Encoding utf8 tmp.txt)时,会触发UnicodeEncodeError,提示'gbk'编码无法转义字符'\u0308'。通过locale.getpreferredencoding()获取到系统默认编码为cp936(即GBK)。

尝试过的方法

尝试直接写入stdout缓冲区绕开默认编码处理,修改脚本为:

# -*- coding: utf-8 -*-
import sys
sys.stdout.buffer.write("Er, Süleyman".encode('utf-8'))

执行后虽无报错,但输出到文件的内容显示乱码:Er, Su虉leyman。

解决方案

在PowerShell 5.1及以上版本中,执行以下命令修改Out-File的默认编码为UTF-8:

$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'

设置后再执行重定向或管道输出命令,即可正常生成UTF-8编码的文件,内容显示正确。

核心原因

问题的本质是Python标准输出、Windows系统、PowerShell三者的默认编码不匹配:

  • Python在终端直接输出时,会自动适配终端的GBK编码,所以能正常显示带特殊字符的内容;
  • 当输出被重定向或管道传输时,Python会切换为使用系统默认编码(CP936)处理输出,而特殊字符ü(由u和组合字符\u0308组成)无法被GBK编码;
  • PowerShell的Out-File默认编码并非UTF-8,即使手动指定-Encoding utf8,也会和Python端的编码处理产生冲突,导致乱码或报错。

内容的提问来源于stack exchange,提问作者link89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:22:11