先点“Reopen with Encoding”确认真实编码,再点“Save with Encoding”真正转码;前者仅改变读取方式不修改文件,后者才重写磁盘内容为指定编码。

VSCode 里中文乱码,不是文件坏了,而是它读错了字节——点右下角编码名,选“Reopen with Encoding”试 GBK 或 UTF-8,能正常显示再点“Save with Encoding”存成 UTF-8,这才是真转换。
右下角点击后选“Reopen with Encoding”还是“Save with Encoding”?
这两个操作完全不是一回事,混用会白忙活:
-
Reopen with Encoding:只改当前 VSCode 怎么读这个文件,不碰磁盘内容。适合排查——比如打开一个乱码 .txt,点它 → 选GBK,文字出来了,说明原文件就是 GBK 编码 -
Save with Encoding:把编辑器里现在看到的内容,按你选的编码(如UTF-8)重新写进硬盘。这才是真正“转码”,文件字节变了 - 常见错误:乱码时直接点右下角 → 选
UTF-8(没选“Reopen”),结果满屏方块——那是 VSCode 强行用 UTF-8 解释 GBK 字节,不是切换,是错解 - 如果点完没反应,先按
Ctrl+S保存一下再试,VSCode 有时要求文件有修改才激活菜单项
为什么改了 files.encoding 还是乱码?
因为 files.encoding 只管新建文件和没 BOM 的旧文件,对已有文件几乎没用:
- 设置
"files.encoding": "utf8"后,新建的.js、.txt默认是 UTF-8,但昨天打开过的 GBK 文件,VSCode 会记住上次用的编码,下次仍按 GBK 打开 - 想让已有文件也“听话”,得关掉自动猜测:
"files.autoGuessEncoding": false——否则它可能在你不知情时又切回 GBK - 如果某个文件死活记不住你选的 UTF-8,删掉工作区下的
.vscode/workspaceStorage文件夹,重启 VSCode,它就清空记忆重来
批量转 GBK 到 UTF-8 别靠 VSCode 插件
VSCode 没有真正批量转码能力,所谓“一键转所有”插件,本质是循环执行“Reopen + Save”,一旦中间某个文件识别失败,就静默损坏:
- Windows 用户推荐 PowerShell +
iconv:Get-ChildItem *.js | ForEach-Object { iconv -f GBK -t UTF-8 $_.FullName | Set-Content "$($_.DirectoryName)\$($_.BaseName)_utf8$($_.Extension)" -Encoding UTF8 } - macOS/Linux 直接用:
find . -name "*.txt" -exec iconv -f GBK -t UTF-8 {} -o {}.utf8 \; - 转之前先确认真实编码,别瞎猜:
file -i *.txt或enca -L zh filename,混合编码项目尤其要扫一遍再分批处理 - 带 BOM 的 UTF-8 文件,VSCode 通常能识别;但 GBK 无 BOM 的旧文件,
autoGuessEncoding基本靠不住,手动干预更稳
终端输出中文乱码跟编辑器编码设置无关
编辑器里中文正常、终端里 python script.py 输出乱码,这不是 VSCode 设置问题,是 shell 进程自己的编码没配好:
- PowerShell:必须在
$PROFILE里加[Console]::OutputEncoding = [System.Text.Encoding]::UTF8,且确认用的是$PROFILE.CurrentUserCurrentHost路径(默认不存在,要手动创建) - Git Bash:检查
~/.bashrc有没有export LANG=zh_CN.GBK,删掉或改成en_US.UTF-8 - cmd:加启动参数
/K chcp 65001 >nul,或换 Windows Terminal 并设"unicode": true - Python 报
UnicodeEncodeError: 'gbk' codec can't encode,说明sys.stdout.encoding是 GBK,改代码加reconfigure是临时补丁,根子在终端
最麻烦的永远是混合编码:有的 .js 是 UTF-8,有的 .log 是 GBK,还有几个 ANSI 的旧配置。这时候盯着 VSCode 右下角点来点去,不如先用命令行扫清底数,再分类动手——编码这事,宁可慢一点,别信“全自动”。











