串口中文乱码:UTF-8 与 GBK 区别及在线助手切换

下位机 `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 字节可换解码器重渲染,无需改固件即可读懂旧设备日志。长期方案仍是:

  1. 固件源文件与编译器编码统一(建议新项目 UTF-8)。
  2. 协议尽量传 ASCII/HEX 数值,少在链路上直接打本地化汉字。
  3. 若必须中文,在文档与上位机写明编码,避免「各猜各的」。

### 实操步骤

  1. 先确认 8N1、波特率正确(排除物理层)。
  2. HEX 抓一帧含中文的日志,对照编码表。
  3. 助手切换 GBK/UTF-8 直到可读。
  4. 定稿后把编码写进联调说明,减少后人重复踩坑。

弄清 UTF-8 与 GBK,是「串口中文乱码」与「真·通信失败」之间的分界线。 ## 一分钟判断是不是编码问题

  1. 接收开 HEX:中文对应字节是否**每次相同**?
  2. 相同且英文正常 → 改 UTF-8/GBK,不要改波特率。
  3. 字节本身乱跳 → 回到电气/波特率排查。

## 本站操作

连接串口后,在显示/解码选项中切换 **UTF-8** 与 **GBK**,同一段数据可重解。适合旧 Keil 工程与新固件混用的现场。

## 相关

串口乱码总览、HEX 与 ASCII 模式选择。