【一篇文章搞定】LVGL显示中文+解决keil下LVGL无法正常显示中文及error:#8:missing closing quote问题

LVGL显示中文

进入lvgl中文文档:显示中文 — LVGL 文档 (100ask.net) 

下载字体zip文件,解压得到一个.otf文件

进入LVGL的字体转换网站   Font Converter — LVGL

1.点击Browse指定.otf文件即可

2.range不用管

3.为了节省内存在Symbols中输入自己要使用的文字即可,而不是包含整个字库

4.点击Submit获得c文件

<think>好的,我现在需要解决用户提到的OLED字库编译错误,具体是`#253 expected a ,`和`#8 missing closing quote`。首先,我得仔细分析用户提供的错误信息和引用内容。 根据引用[1]和[2],错误发生在`oledfont.c`文件中,特别是第337行和338行。用户尝试更改编码为GBK、ANSI、UTF-8,但问题依旧存在。错误提示缺少逗号和引号,这可能与字符编码或语法错误有关。 首先考虑字符编码问题。如果源文件中含有非ASCII字符,比如中文字符,编译器可能无法正确解析,导致引号或逗号识别错误。比如,中文字符可能在保存时被错误编码,导致编译器误判字符串的结束位置。这时候需要检查文件是否使用正确的编码格式保存,比如UTF-8 without BOM,或者编译器支持的编码。 接着,检查语法错误。错误提示显示在第337行附近,可能存在字符串缺少闭合引号的情况。比如,某个字符串常量没有正确闭合,或者逗号在数组初始化时遗漏。例如,数组中的元素之间需要用逗号分隔,如果某行末尾忘记加逗号,会导致后续行出现语法错误。此外,特殊字符如转义字符可能需要正确处理,比如反斜杠需要转义写成两个反斜杠。 另外,用户提到字库数据可能包含非标准字符,比如中文字符或全角符号。例如,在字符串中使用中文标点符号(如“,”)而非英文逗号,或者全角引号,这会导致编译器无法识别,从而报错。需要检查这些字符是否被正确使用。 解决方案方面,首先建议用户用十六进制编辑器检查可疑位置的字符编码,确认是否有异常字符。然后,逐行检查报错位置附近的代码,特别是字符串的引号是否成对,数组元素是否用逗号正确分隔。同时,确保文件编码正确,推荐使用UTF-8 without BOM,并在编译器设置中指定对应的编码。对于中文字符,可能需要使用转义序列或替换为ASCII字符。 最后,建议用户分步骤处理:先处理引号错误,再解决逗号问题,每次修改后重新编译,逐步排除错误。如果问题依旧存在,可能需要简化代码,比如注释掉部分字库数据,定位具体出错的位置。</think>### OLED字库编译错误解决方案 #### 1. **问题定位与分析** - **错误类型**:`#253 expected a ,` 表示编译器在代码中期望一个逗号但未找到; - **错误类型**:`#8 missing closing quote` 表示字符串缺少闭合引号。 - **常见触发场景**: - 字库数据中包含非法字符(如中文符号、特殊编码字符)[^1][^2]; - 数组初始化时缺少逗号分隔符; - 字符串或字符常量未正确闭合。 --- #### 2. **关键排查步骤** ##### **步骤1:检查文件编码格式** - **问题**:中文字符或特殊符号在UTF-8/GBK编码下可能被误解析。 - **解决方法**: 1. 用记事本或代码编辑器(如VS Code)打开`oledfont.c`,另存为 **UTF-8 without BOM** 格式; 2. 确认编译器(Keil/IAR)的编码设置与文件一致,避免编码冲突[^1]。 ##### **步骤2:检查语法错误** - **问题**:数组初始化时缺少逗号或引号未闭合。 - **示例代码片段**: ```c // 错误示例:缺少逗号 const unsigned char font_table[] = { "ABC", // 正确 "DEF" // 错误:行末缺少逗号 "GHI" }; ``` - **解决方法**: 1. 检查报错行(如337、338行)附近的数组定义,确保每行末尾有逗号; 2. 确认字符串常量使用**英文双引号**闭合,避免中文字符干扰。 ##### **步骤3:排查非法字符** - **问题**:字库数据中可能包含全角符号(如`,`、`“”`)或转义字符错误。 - **解决方法**: 1. 使用十六进制编辑器检查报错位置的字符,替换非法符号; 2. 将中文字符替换为ASCII字符或Unicode转义序列(如`\u4E2D`)。 --- #### 3. **代码修正示例 ```c // 修正前(错误示例) const char* error_line = "锛?; // 未闭合引号,且包含中文字符 // 修正后 const char* error_line = "?"; // 使用英文符号闭合 ``` --- #### 4. **验证与测试** 1. 修改后保存文件,重新编译; 2. 若仍报错,逐步注释掉字库数据块,定位具体错误位置; 3. 使用预处理命令`#pragma`指定编码(部分编译器支持)。 --- #### 引用总结 编码冲突和语法错误是此类问题的常见原因[^2]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值