vscode报该提示仅有两类互斥原因:一是文件确为二进制(如.exe、.png),需用hex editor扩展打开;二是文本文件编码非utf-8(如gbk、big5),应通过右下角编码菜单“以编码重新打开”尝试适配。

VSCode 报“二进制文件或使用了不受支持的文本编码,所以无法在文本编辑器中显示”,本质只有两个互斥原因:文件确实是二进制(如 .bin、.png、.exe),或文件是文本但编码不是 UTF-8(如 GBK、BIG5、ISO-8859-1)。先分清是哪一类,再选对应解法,别一上来就改设置。
怎么快速判断是二进制还是编码问题
别靠猜,用命令行 10 秒确认:
- Linux/macOS:
file -i filename看charset=后面是不是utf-8;如果是binary或application/octet-stream,就是真二进制 - Windows PowerShell:
Get-Content -Path filename -Encoding Byte -TotalCount 8 | ForEach-Object { $_.ToString("X2") }查前 8 字节——出现多个00或非可打印字节(如FF、FE),大概率是二进制 - VSCode 右下角状态栏点编码名(如
UTF-8)→ 选“通过编码重新打开”→ 依次试GBK、GB2312、ISO-8859-1;如果某次打开后中文正常、无乱码,就是编码问题
确认是二进制文件:必须用 Hex Editor 扩展
VSCode 本身不支持二进制编辑,装插件只是第一步,关键在触发方式和模式切换:
- 只装 Microsoft 官方
Hex Editor(ID:ms-vscode.hexeditor),别选hex-viewer或vscode-hexdump——它们不支持保存,且可能静默损坏文件 - 装完必须点右下角“Reload Window”,否则
Ctrl+Shift+P里搜不到Hex Editor: Reopen as Hex - 双击
.bin文件仍报错?说明没触发成功——右键资源管理器中该文件 → “Open with Hex Editor”;如果右键没这选项,先用普通方式打开,再按Ctrl+Shift+P→ 输入并执行Hex Editor: Reopen as Hex - 打开后右下角显示
[READONLY]?点击它切换成Hex Editor (Edit),否则所有修改(双击改字节、粘贴)都无效 - 保存永远只用
Ctrl+S,千万别点右下角的Save with Encoding——选 UTF-8 会把整个二进制当文本重编码,文件立即损坏
确认是文本但编码不对:优先用“通过编码重新打开”
这是最轻量、最安全的解法,不用装插件、不改配置:
- 右下角状态栏点当前编码(如
UTF-8)→ 选“通过编码重新打开”→ 从列表里选常见中文编码:GBK、GB2312、GBK with BOM - 如果常用某一种(比如项目全用 GBK),可在
settings.json加:"files.encoding": "gbk",下次新建/打开未声明编码的文本文件就会默认用 GBK 解析 - 避免用
files.autoGuessEncoding:它会拖慢大文件打开速度,且识别不准(尤其混合中英文日志) - 已知文件是 UTF-8 但带 BOM?VSCode 显示为
UTF-8 with BOM时,右下角点它 → 选“以 UTF-8 保存”,BOM 就被移除了——很多工具链(如 Python、Webpack)不认带 BOM 的 UTF-8
为什么配了 files.associations 还是打不开 .bin
因为 VSCode 对 .exe、.dll、.so 等有硬性安全拦截,即使你写了 "*.bin": "hexeditor",它也可能 fallback 到拒绝提示。这不是配置失效,而是设计如此:
-
files.associations只对“未被内置策略标记为高危”的扩展名有效,比如.fw、.img、.raw可以配,但.exe不行 - 想强制打开某类文件,得加白名单:
"hexEditor.supportedLanguages": ["*"],但慎用——它会让所有文件(包括.js)都能被 Hex Editor 打开,影响性能和误操作风险 - 真正可靠的流程永远是:右键 → Open with Hex Editor,或命令面板调
Hex Editor: Open File(它会跳出系统选择框,绕过资源管理器缓存)
最常被忽略的细节:Hex Editor 编辑时所有修改都在内存,关标签页前不按 Ctrl+S 就彻底丢失;而一旦保存,就是直接覆写原文件,没有备份、没有确认弹窗、撤销只支持单步 Ctrl+Z。处理固件、驱动这类文件前,务必先复制一份 firmware.bin.bak。











