右键菜单“通过 code 打开”显示乱码是因hibit uninstaller在hklm创建了空注册表项vscodecontextmenu,导致windows 11无法读取title值;需用powershell以管理员身份为其写入“通过 code 打开”字符串值并重启explorer.exe。

右键菜单“通过 Code 打开”显示乱码,不是终端问题
这和 print() 输出乱码、终端字体方块完全无关——它只影响资源管理器右键菜单里的文字显示,功能照常可用。你看到的是“□□□打开”或“??????”,但点击后 VSCode 仍能正常启动并加载文件。
根本原因是 HiBit Uninstaller 在 HKLM 创建了空注册表项
Windows 11 下,VSCode 1.109+ 把右键菜单注册路径从 HKCR 迁移到 HKCU\Software\Classes,但系统读取时会优先检查同名的 HKLM\SOFTWARE\Classes\VSCodeContextMenu。HiBit 扫描注册表时会悄悄创建这个空项,导致 Windows 读不到 Title 值,只能渲染乱码。
- 仅在 Windows 11 复现,Win10 正常
- 卸载重装 VSCode 无效,因为注册表残留还在
- 删除该空项能临时恢复,但下次 HiBit 扫描又复现
彻底修复:用 PowerShell 给 HKLM 项写入 Title 值
只要让 HKLM\SOFTWARE\Classes\VSCodeContextMenu 下存在一个非空的 Title 字符串值,系统就能正确读取并显示中文。以下脚本自动提权、创建项、写入值:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit
}
$KeyPath = "HKLM:\SOFTWARE\Classes\VSCodeContextMenu"
if (-not (Test-Path $KeyPath)) { New-Item -Path $KeyPath -Force | Out-Null }
New-ItemProperty -Path $KeyPath -Name "Title" -Value "通过 Code 打开" -PropertyType String -Force | Out-Null
以管理员身份运行后,重启文件资源管理器(任务管理器 → 重启 explorer.exe)或直接注销重登录即可生效。
别碰 Code Runner 的右键运行逻辑
如果你误以为“右键运行代码”是指 Code Runner 插件的右键菜单,那它压根不走注册表路径,而是插件自己渲染的 UI,不会出现中文乱码。Code Runner 的乱码只发生在终端输出阶段,应按 PYTHONIOENCODING + chcp 65001 方式处理,和这里完全无关。
真正卡住的人,往往反复删注册表、重装 VSCode、换字体、改终端编码……最后才发现问题藏在 HKLM 一个空项里,连带没意识到 Windows 11 对外壳扩展注册表的读取优先级已经变了。











