powershell终端中文乱码需设$outputencoding为utf-8,因vs code默认继承gbk编码,node.js输出的utf-8字节流被错误解码;临时执行$outputencoding=[system.text.utf8encoding]::new(),永久写入$profile或通过vs code settings.json配置chcp 65001启动参数。

PowerShell 终端里 $OutputEncoding 必须设成 UTF-8
Windows 下 VS Code 默认用 PowerShell 作终端,但它启动时不主动设置 $OutputEncoding,而是继承控制台代码页(通常是 GBK,即 chcp 936)。Node.js 进程输出的 UTF-8 字节流被当成 GBK 解码,中文就变 ??? 或方块。
直接在终端里运行这行命令即可当场生效:
$OutputEncoding = [System.Text.UTF8Encoding]::new()
- 只对当前终端会话有效,关掉就失效
- 别用
[Console]::OutputEncoding—— 它只影响 .NET 原生输出,对node子进程无效 - 加到
$PROFILE文件里可一劳永逸:先运行notepad $PROFILE确保文件存在,再追加上面那行
settings.json 里配 terminal.integrated.profiles.windows
每次手动敲命令太麻烦?把 chcp 65001 写进 VS Code 启动参数,让每个新 PowerShell 终端一开就切 UTF-8。
打开 settings.json(Ctrl+Shift+P → “Open Settings (JSON)”),加这段:
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
"terminal.integrated.profiles.windows": {
"PowerShell": {
"args": ["-NoExit", "-Command", "chcp 65001"]
}
},
"terminal.integrated.defaultProfile.windows": "PowerShell"
-
chcp 65001是 Windows 下切换 UTF-8 的唯一可靠方式 - 如果用的是 CMD 而不是 PowerShell,把
PowerShell换成Command Prompt,args改成["/k", "chcp 65001"] - 这个配置不解决 Node.js 自身输出逻辑,只确保终端能正确解码字节流
Node.js 进程本身没被告知编码怎么办
即使终端已设 UTF-8,某些旧版 Node.js(尤其 v14 及更早)或特定 spawn 场景下,子进程仍可能沿用父进程的环境编码。这时得靠环境变量“推一把”。
在 settings.json 里加:
"terminal.integrated.env.windows": {
"NODE_OPTIONS": "--no-warnings",
"PYTHONIOENCODING": "UTF-8"
}
-
PYTHONIOENCODING对 Python 有效,但 Node.js 不认它;加了也没害处,常和 Python 项目共存 - 真正起作用的是终端本身的
chcp 65001或$OutputEncoding,Node.js 默认信任 stdout 的编码声明 - 如果你用
child_process.spawn启动其他程序,记得显式传{ encoding: 'utf8' },否则默认 binary
别碰系统区域设置里的“UTF-8 全球支持”
网上有教程让你勾选“使用 UTF-8 提供全球语言支持”,然后重启电脑——这确实能让 CMD 全局变 UTF-8,但副作用明显:
- 部分老旧 Windows 工具(如某些批处理、VBScript、.NET Framework 4.7.2 以下程序)会崩溃或行为异常
- 影响所有用户、所有终端,不是开发专用方案
- VS Code 本身不依赖该设置,改了反而增加排查复杂度
优先走终端级修复($OutputEncoding 或 chcp 65001),这是最轻量、最可控的路径。系统级改动留到最后迫不得已时再考虑。










