下位机 `printf("环境温度:25℃\n")` 一类日志,在电脑串口助手上却变成 `?`、`` 或半截汉字,多半不是线接错,而是 **字符集编码不一致**。
### 两种主流中文编码
| 编码 | 常见环境 | 汉字字节数 | 特征 | |---|---|---|---| | **GBK / GB2312** | 旧 Keil、部分 Windows 国标工程 | 2 | Windows 中文系统历史默认 | | **UTF-8** | 现代 IDE、Web、Linux、多数 IoT 固件 | 3(常用汉字) | 国际通用 |
例如「温」在 GBK 与 UTF-8 下字节完全不同。MCU 按 GBK 吐出两字节,浏览器/助手按 UTF-8 拼码,校验失败就显示替换符乱码。
### 和「波特率乱码」怎么区分?
- **物理乱码**:英文、数字、HEX 全错,换波特率有改善。
- **编码乱码**:HEX 视图里字节稳定、可复现;纯 ASCII 正常,一出中文就炸。
打开接收区的 **HEX 显示** 是最快判据。
### 在线串口助手怎么解
Web Serial Pro 等工具在文本解码层提供 **UTF-8 / GBK / GB2312** 切换:同一段 RX 字节可换解码器重渲染,无需改固件即可读懂旧设备日志。长期方案仍是:
- 固件源文件与编译器编码统一(建议新项目 UTF-8)。
- 协议尽量传 ASCII/HEX 数值,少在链路上直接打本地化汉字。
- 若必须中文,在文档与上位机写明编码,避免「各猜各的」。
### 实操步骤
- 先确认 8N1、波特率正确(排除物理层)。
- HEX 抓一帧含中文的日志,对照编码表。
- 助手切换 GBK/UTF-8 直到可读。
- 定稿后把编码写进联调说明,减少后人重复踩坑。
弄清 UTF-8 与 GBK,是「串口中文乱码」与「真·通信失败」之间的分界线。 ## 一分钟判断是不是编码问题
- 接收开 HEX:中文对应字节是否**每次相同**?
- 相同且英文正常 → 改 UTF-8/GBK,不要改波特率。
- 字节本身乱跳 → 回到电气/波特率排查。
## 本站操作
连接串口后,在显示/解码选项中切换 **UTF-8** 与 **GBK**,同一段数据可重解。适合旧 Keil 工程与新固件混用的现场。
## 相关
串口乱码总览、HEX 与 ASCII 模式选择。