Keil uVision5 中文注释乱码?别再靠“试错重启”了——五种真正能落地的工程级解法
你有没有过这样的经历:
写完一段关键逻辑,加了三行中文注释说明状态机跳转条件,编译通过、调试正常……结果第二天同事打开工程,发现那几行字全变成了“涓?ュ?ュ?”;
或者 Git 拉下来一个分支,git diff里突然冒出几十个“无意义变更”,点开一看全是+开头的不可见字符;
又或者在 uVision5 里改完注释保存,再打开就变成乱码,但用 Notepad++ 打开却完全正常——你开始怀疑是不是自己电脑中毒了。
这不是玄学,也不是 Keil 的 bug。这是 Windows 传统编码体系与现代协作开发范式之间一次沉默而高频的碰撞。而这场碰撞,每天都在成百上千个嵌入式团队中真实发生。
为什么 uVision5 看不懂你的中文?
先说结论:uVision5 不是不支持中文,而是它根本没打算“主动猜”你用的是什么编码。
它的文本引擎非常“老实”——启动时读一眼系统区域设置(比如简体中文 Windows 默认是 GBK/CP936),然后就认定:“好,所有没带签名的文件,都按这个码表来解。”
可问题来了:你用 VS Code 写的.c文件,默认是 UTF-8 无 BOM;Git 提交时也默认按 UTF-8 处理;甚至你复制粘贴进来的中文,十有八九也是 UTF-8 编码。
于是 uVision5 拿着 GBK 的“字典”,去查 UTF-8 的“密码本”——两个字节的中文被硬拆成两个独立字符,自然就崩成了“锟斤拷”。
📌 关键事实:uVision5 自 v5.28 起确实增加了对 UTF-8 的识别能力,但仅当文件开头存在 BOM(
0xEF 0xBB 0xBF)时才触发。而现代编辑器和 Git 社区早已达成共识:UTF-8不要 BOM。这就形成了一个典型的“兼容性断层”。
所以,指望 Keil 某天突然“自动适配 UTF-8”,不如现在就建立一套团队可复现、CI 可验证、新人零门槛的编码治理机制。
方案一:UTF-8 无 BOM + UVISION.INI 配置(推荐指数 ⭐⭐⭐⭐⭐)
这是目前我们在线上量产项目中采用率最高、维护成本最低、长期收益最稳的一套组合。
它怎么工作?
- 所有源码文件统一保存为UTF-8 无 BOM(
.c/.h/.s); - 修改
%USERPROFILE%\AppData\Roaming\Keil_v5\UVISION.INI,添加或修改这一行:ini Editor.Encoding=65001 - 重启 uVision5,新建文件默认就是 UTF-8;已有文件只要本身是 UTF-8 无 BOM,就能正确显示。
为什么强调“无 BOM”?
因为 uVision5 对 B