终端中 pnpm 更新提示框乱码
场景
在用IDEA本地跑Halo时,终端输出了一段乱码如下。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
鈺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈺?
鈹? 鈹?
鈹? Update available! 10.34.1 鈫?11.5.1. 鈹?
鈹? Changelog: htlog: https://pnpm.io/v/11.5.1 鈹?
鈹? To update, run: pnpm add -g pnpm 鈹?
鈹? 鈹?
鈺扳攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈺?经过如下步骤,得以解决。
问题定位
典型的终端字符编码问题,pnpm 的更新提示框使用了 Unicode 的方框绘图字符(Box-drawing characters),但你的终端未能正确解码,显示成了乱码和类似 鈺 鈹 的符号。
1. 检查并修改 IDEA 终端编码
File > Setting
Editor > File Encodings

经检查,均为UTF-8,没有问题。
2. 检查终端的当前字符编码
命令如下:
Linux / macOS / Git Bash:
locale,关注输出中的LC_ALL、LC_CTYPE和LANG变量如果显示类似
zh_CN.UTF-8,说明是 UTF-8;如果显示
zh_CN.GBK或zh_CN.GB2312,那就是中文编码,这就会导致乱码。
Windows(CMD):
chcp,关注返回的数字代码页:936 = GBK
65001 = UTF-8
Windows(PowerShell):
[System.Text.Encoding]::Default.EncodingName或$OutputEncoding
当前使用的是PowerShell,输入[Console]::OutputEncoding,得到如下输出:
input:[System.Text.Encoding]::Default.EncodingName
Unicode (UTF-8)当前 PowerShell 的默认编码已经是 UTF-8 了,所以问题不在系统层面。
乱码是在输出过程中发生的。pnpm 的这个更新提示框是通过 stdout(标准输出) 打印的,在 Windows 下,PowerShell 的 $OutputEncoding 和 [Console]::OutputEncoding 可能仍然不是 UTF-8。
3. 检查控制台实际输出编码
# 1. 查看 PowerShell 管道编码
$OutputEncoding
# 2. 查看控制台实际输出编码(这个最关键)
[Console]::OutputEncoding
# 3. 再次确认当前代码页
chcp通过验证发现[Console]::OutputEncoding 为GB2312(代码页 936),实际输出如下:
input:[Console]::OutputEncoding
EncodingName : Chinese Simplified (GB2312)
WebName : gb2312
HeaderName : gb2312
BodyName : gb2312
Preamble :
WindowsCodePage :
IsBrowserDisplay :
IsBrowserSave :
IsMailNewsDisplay :
IsMailNewsSave :
IsSingleByte : False
EncoderFallback : System.Text.InternalEncoderBestFitFallback
DecoderFallback : System.Text.InternalDecoderBestFitFallback
IsReadOnly : False
CodePage : 936解决方案
方案一:修改IDEA的Shell path(无效)
在 Settings → Tools → Terminal 中找到 Shell path
将原路径:
"C:\Program Files\PowerShell\7\pwsh.exe"替换为:"C:\Program Files\PowerShell\7\pwsh.exe" -NoExit -Command "[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; chcp 65001 > $null"Environment variables 中加上:
LESSCHARSET=utf-8
实践后,终端无法启动,经过验证为无效方案。
方案二:通过 PowerShell 配置文件
在当前的 IDEA 终端中运行:
# 如果配置文件不存在则创建
if (!(Test-Path $PROFILE)) { New-Item -Path $PROFILE -Type File -Force }
# 用记事本打开配置文件
notepad $PROFILE在打开的 Microsoft.PowerShell_profile.ps1 文件末尾添加:
# 强制控制台输出编码为 UTF-8,解决 IDEA 终端乱码
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
chcp 65001 > $null经过验证后,终端乱码消失。
总结
通过本次踩坑,了解了如下知识:
Windows PowerShell出现乱码的解决方案
IDEA Shell设置方式(部分)
评论