Smart Encoding: UTF-8 / GB2312 + Manual
一个面向旧工程、HMI 工程和混合编码源码的 VS Code 扩展。
核心策略保持简单:只自动识别 UTF-8 和 GB2312;如果无法确定属于这两种编码,就让用户手动选择 VS Code 支持的其他编码,并按文件记住。
功能
- 严格检测 UTF-8。
- 对非 UTF-8 文件继续检查是否符合 GB2312 字节结构。
- 无法判定为 UTF-8 / GB2312 时,自动弹出编码选择列表。
- 可手动选择 GBK、GB18030、Big5、Shift JIS、EUC-JP、Windows-1252、UTF-16 LE/BE 等 VS Code 支持的编码。
- 手动选择后,记录到当前工程的
<workspace>/.vscode/smart-encoding.json。
- 再次打开同一个文件时,直接按照记录的编码重新打开,不再询问。
- 记录使用相对路径,工程移动、复制到其他盘或其他电脑后仍然有效。
- 不主动把源文件转换为 UTF-8,也不会为了识别而修改磁盘中的原文件。
- 文件存在未保存修改时,拒绝自动关闭并重新打开,避免错误编码写回磁盘。
工作流程
打开文件
│
├─ 已有编码记录 ─────────────→ 按记录编码打开
│
└─ 没有记录
│
├─ 严格 UTF-8 合法 ───→ UTF-8 → 记录
│
├─ 符合 GB2312 结构 ──→ GB2312 → 记录
│
└─ 两者都不是/无法确定
│
↓
手动选择编码
│
↓
.vscode/smart-encoding.json
│
↓
下次自动按记录打开
编码记录文件
第一次需要记忆编码时会创建:
<your-project>/.vscode/smart-encoding.json
例如:
{
"version": 2,
"files": {
"HMI/main.c": "gb2312",
"src/app.c": "utf8",
"legacy/old_cn.txt": "gbk",
"legacy/japanese.txt": "shiftjis",
"legacy/western.txt": "windows1252",
"legacy/unicode.txt": "utf16le"
}
}
文件中只保存相对路径 + 编码 ID,不会保存源文件内容。
如果希望团队共享编码规则,可以把这个 JSON 提交到 Git;如果只想自己使用,可以把它加入 .gitignore。
手动选择编码
当插件无法判断文件是 UTF-8 还是 GB2312 时,会弹出选择框。
UTF-8 和 GB2312 会放在最前面,其余编码列在“其他 VS Code 支持的编码”下面。选择后立即记忆并按该编码重新打开文件。
也可以随时点击状态栏的:
ENC: <encoding>
重新选择并记录当前文件编码。
纯 ASCII 文件
纯 ASCII 字节在 UTF-8 和 GB2312 中完全相同,因此无法自动区分。
默认按 UTF-8 处理:
{
"smartEncoding.asciiDefault": "utf8"
}
对于以老式 HMI/GB2312 为主的项目,可以设置:
{
"smartEncoding.asciiDefault": "gb2312"
}
安全行为
如果当前文件已经被修改但尚未保存,插件不会自动关闭/重新打开它。这样可以避免在编码尚未确认时把内容用错误编码保存到磁盘。
命令
Smart Encoding: Choose and Remember Encoding
Smart Encoding: Forget and Detect Again
第二个命令会删除当前文件的记忆,然后重新执行 UTF-8 / GB2312 检测;如果仍无法确定,则再次让用户选择。
开发运行
- 安装 Node.js。
- 使用 VS Code 1.136+ 打开此工程。
- 执行
npm install。
- 执行
npm run compile,或直接按 F5 启动 Extension Development Host。
- 打开包含不同编码文件的测试工程。
v0.0.3
- 保留 UTF-8 / GB2312 自动识别。
- 不再把所有非 UTF-8 文件直接视为 GB2312,而是增加 GB2312 字节结构检查。
- 对无法确认的文件提供完整的手动编码选择。
- 手动选择结果继续存放在
.vscode/smart-encoding.json 中,并在以后自动恢复。