powershell终端中文乱码主因是[console]::outputencoding未设为utf-8,需在$profile中添加$outputencoding = [console]::outputencoding = [system.text.encoding]::utf8,并配置vscode终端启动时执行chcp 65001,同时确保字体支持cjk及系统启用utf-8区域设置。

PowerShell终端输出中文乱码:先确认当前编码
VSCode里PowerShell终端中文显示为“”或“文件”,大概率是[Console]::OutputEncoding没设成UTF-8。直接在终端里运行这行命令就能验证:
[Console]::OutputEncoding
如果返回的是System.Text.SBCSCodePageEncoding(常见于GBK环境)或IBM437,说明它正用错误的编码“翻译”中文输出字节流——不是程序没输出中文,而是终端读错了。
临时修复很简单:
$OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
但别只靠这句,关掉终端就失效。真正要改的是PowerShell配置文件。
永久生效:修改PowerShell配置文件
PowerShell的用户配置文件路径是$PROFILE,它只在启动时加载一次。执行以下命令确保文件存在并用VSCode打开:
if (!(Test-Path -Path $PROFILE)) { New-Item -Type File -Path $PROFILE -Force }<br>code $PROFILE
在打开的Microsoft.PowerShell_profile.ps1末尾,**必须**加上这一行(注意不能漏等号):
$OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
- 别写成
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8单条——PowerShell 7+会报错,因为[Console]::OutputEncoding是只读属性 - 别把这行放进
if块或函数里,它得在profile顶层无条件执行 - 改完保存后,重启VSCode终端(不是仅新建一个tab),否则不会重载profile
VSCode终端启动参数要同步chcp 65001
即使PowerShell内部编码设对了,Windows控制台底层代码页仍可能是GBK(936)。这时候程序通过Write-Host或外部命令(如python)输出中文,还是会走系统代码页兜底。所以必须让终端一启动就切到UTF-8:
在VSCode设置中搜索terminal.integrated.profiles.windows,找到PowerShell配置项,在args里加入"-Command", "chcp 65001":
"PowerShell": {<br> "source": "PowerShell",<br> "args": ["-NoExit", "-Command", "chcp 65001"]<br>}
-
-NoExit保留交互式会话,否则chcp执行完终端就退出了 - 不要用
shellArgs.windows老配置项,它已被弃用,VSCode 1.8+不生效 - 如果同时装了PowerShell Core(pwsh)和Windows PowerShell,确保你改的是对应profile——
$PROFILE路径不同
别忽略字体和系统区域设置
编码全对了但还是方块?那问题在渲染层。VSCode终端默认字体可能不带CJK字形,比如'Cascadia Code'在某些版本里缺中文支持。
在设置里搜terminal.integrated.fontFamily,改成明确支持中文的字体:
'Cascadia Code', 'Microsoft YaHei', monospace'Consolas', 'SimSun', monospace
另外,Windows系统级区域设置会影响子进程继承的LANG环境变量。进控制面板 > 区域 > 管理 > 更改系统区域设置,勾选Beta版:使用Unicode UTF-8提供全球语言支持——这个开关重启后才生效,但它能一劳永逸解决Python、Node.js等子进程的编码继承问题。
最常被跳过的动作:改完所有配置后,必须彻底关闭VSCode再重开。只重启终端或重载窗口,$PROFILE和系统代码页设置都不会重新初始化。











