PowerShell 在 VS Code 中中文乱码的根本原因是编码不匹配,需统一设为 UTF-8:切换至 PowerShell 7+、配置 $PROFILE 设置 $OutputEncoding 和 [Console]::OutputEncoding 为 UTF8、终端启动时执行 chcp 65001,并启用系统级 UTF-8 支持。

PowerShell 在 VS Code 终端里输出中文变成 æˆ‘çˆ±ä¸æ–‡ 或方块问号,根本不是 Codex、插件或字体的问题,而是 PowerShell 读取/写入字节时用的编码和实际内容不匹配。Windows 默认用 GBK(代码页 936),而现代工具链(Node、Codex、脚本生成内容)几乎都输出 UTF-8。只要把 PowerShell 的输入输出统一设为 UTF-8,并确保终端启动时就生效,乱码基本就消失了。
确认你用的是 PowerShell 7+ 而不是 Windows PowerShell 5.1
PowerShell 5.1 和 PowerShell 7+ 的编码行为完全不同:前者默认按系统 ANSI(GBK)处理外部字节流,后者默认输出 UTF-8,且支持干净地覆盖 $OutputEncoding 和 [Console]::OutputEncoding。
- 在 VS Code 终端中运行:
$PSVersionTable.PSVersion—— 如果主版本是5.1.x,说明你还在旧版;必须切换到pwsh.exe(即 PowerShell 7+) - 检查当前终端宿主:
$Host.Name应为ConsoleHost,再执行Get-Process -Id $PID | Select-Object ProcessName,确认进程名是pwsh而非powershell - VS Code 设置中搜索
terminal.integrated.defaultProfile.windows,值必须是PowerShell(注意:它默认指向pwsh,但某些旧配置可能仍绑死powershell.exe)
强制 PowerShell 启动时设为 UTF-8 输出
只改 VS Code 设置不够,因为 PowerShell 自身的输出编码([Console]::OutputEncoding)可能被忽略或重置。最稳的方式是在 PowerShell 配置文件里硬编码设置。
- 运行
if (!(Test-Path $PROFILE)) { New-Item -Type File -Path $PROFILE -Force }确保配置文件存在 - 执行
code $PROFILE打开Microsoft.PowerShell_profile.ps1 - 在里面添加这一行(不能少):
$OutputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 - 保存后重启 VS Code 终端,再运行
[Console]::OutputEncoding,应返回System.Text.UTF8Encoding
VS Code 终端启动参数必须带 chcp 65001
即使 PowerShell 内部用了 UTF-8,Windows 控制台底层的代码页(console code page)如果还是 936(GBK),外部程序(比如 Node.js 进程、Python 子进程)输出的 UTF-8 字节仍会被错误解析。所以终端启动第一件事就得切代码页。
- 打开 VS Code
settings.json,确保有如下配置: "terminal.integrated.profiles.windows": { "PowerShell": { "source": "PowerShell", "args": ["-NoExit", "-Command", "chcp 65001 > $null"] } }- 不要用
shellArgs,它已被弃用;也不要漏掉-NoExit,否则-Command执行完终端就退出了 - 如果终端仍乱码,检查执行策略:
Get-ExecutionPolicy若为Restricted,需临时设为Bypass(加到args里:["-ExecutionPolicy", "Bypass", "-NoExit", "-Command", "..."])
别跳过系统级 UTF-8 开关(尤其多人协作环境)
上面三步能解决 90% 的本地乱码,但如果你共享脚本、用 Git Bash/WSL、或者同事在另一台机器上拉代码,只靠 VS Code + PowerShell 配置是脆弱的。Windows 的“Beta 版:使用 Unicode UTF-8 提供全球语言支持”开关一开,所有控制台(cmd、PowerShell、第三方终端)默认代码页就是 65001,不再依赖每个终端单独配。
- 打开「控制面板 → 区域 → 管理 → 更改系统区域设置」
- 勾选「Beta 版:使用 Unicode UTF-8 提供全球语言支持」
- 重启电脑(不是 VS Code,是整机重启)
- 这一步看似重,但它让
chcp 65001不再是补丁,而是系统共识——后续新装的工具、CI 环境、远程服务器脚本,都不用再各自 hack 编码逻辑
最容易被忽略的是:PowerShell 配置文件($PROFILE)里的 $OutputEncoding 设置,在非交互式场景(比如通过 Start-Process 启动子进程、或重定向输出到文件)下可能不生效;此时必须同时确保 [Console]::OutputEncoding 和系统代码页一致。两层都设死,才真正防住乱码。


















