Keil5编译UTF8码中文字符串编译出错,串口通讯中文字符串中 \r 转换出错
触发条件:
单片机 C语言源文件格式为UTF-8,KEIL MDK配置中 编辑器的编码方式也为 UTF-8(路径:Edit-Configuration-Editor-Encoding)。
问题现象:
UART串口输出的 字符串中如果 带转义字符 “\r\n”,编译成目标文件后,串口助手ASCII模式下显示接收到的字符串中带有“\r”,使用串口助手HEX模式发现对应位置接收到的是 0x5C 0x72 ('' 和 'r' 字符 对应的ASCII码),说明 单片机中字符串中的 “\r” 字符并没有被转义为 RETURN 。
解决方法:
工程选项中,选择C/C++选项卡,在Misc Controls中加上:--no-multibyte-chars , 再重新编译工程。
备注:
- 如果 C语言源代码文件的编码格式为 ANSI ,KEIL MDK配置中 编辑器的编码方式 无论为 gb2312 还是 UTF-8,均无此问题。
- 串口助手 的 发送和接收 缓冲区 的 编码格式 应当与 C语言源文件格式 保持一致(例如,当源代码为UTF-8时,串口助手显示模式也应当为 UTF-8;其它情况,串口助手可设置为或GB2312或GB18030) 才能正常显示中文。

浙公网安备 33010602011771号