ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Flipper Zero 乱码排查记录:一个根因,四处改动

Flipper Zero 乱码排查记录:一个根因,四处改动 Flipper Zero 乱码排查记录一个根因四处改动【免费下载链接】flipperzero-firmwareFlipper Zero firmware source code项目地址: https://gitcode.com/GitHub_Trending/fl/flipperzero-firmwareFlipper Zero 固件flipperzero-firmware的中文显示问题本质上是固件缺少中文字体数据和语言配置项导致界面出现问号、方块等乱码。这篇文章按现象 → 根因 → 改造 → 验收的顺序把定位和修改路径一次讲清楚。对照三类乱码现象拿到设备后先按界面出现的位置归类问题这比逐字猜原因快得多。中文显示为问号或空格菜单项、应用名里原本该出现汉字的位置变成?或空白最常见。字符串出现乱码方块第三方应用或文件浏览器中的路径、备注字段出现连续方块或错位字符。日期、时间、单位等格式与语言习惯冲突如 12 小时制、英里单位虽然不是乱码但同属本地化缺失的表现。这三类现象指向同一个位置显示层拿到的字符在字体里找不到对应字形。看固件里字符集缺在哪设备显示走的是 lib/u8g2/ 下的 u8g2 库字体以压缩 C 数组的形式编译进固件。applications/services/gui/canvas.c 里可以看到canvas_set_font只在几套 Latin 字体间切换例如u8g2_font_helvB08_tr和u8g2_font_profont11_mru8g2_SetFont(canvas-fb, u8g2_font_helvB08_tr);字体数组里没有 CJK 码位的字形数据所以中文字符渲染出来就是问号或方块。再看本地化服务。applications/services/locale/ 的 locale.h 目前只定义了单位制、时间制、日期格式三类枚举没有任何语言选项也没有中文字符串资源typedef enum { LocaleTimeFormat24h 0, LocaleTimeFormat12h 1, } LocaleTimeFormat;换句话说乱码不是某一行代码写错而是字体数据和语言配置两块能力在固件里整体缺失。把字体、资源、语言设置挂进固件改造分三块互不依赖可以分开验证。转换并挂接 u8g2 中文字体。选一款开源中文字体如文泉驿微米黑用 u8g2 的字体转换工具把 TTF 转成 C 数组注意先做子集裁剪。仓库里已有现成参考applications/examples/example_custom_font/ 演示了如何用canvas_set_custom_u8g2_font挂接一个自定义字体并绘制非 Latin 字符照着这个例子改就行。字体数据放入 lib/u8g2/其 SConscript 通过GlobRecursive(*.c)收集源文件新文件按同样规则挂入即可。扩展语言枚举。在 locale.h 中增加语言定义写法参考现有枚举typedef enum { LocaleLanguageEnglish 0, LocaleLanguageChinese 1, } LocaleLanguage;locale 服务的配置通过 RTC 接口持久化furi_hal_rtc_set_locale_units等语言偏好照此办理重启后不会丢。加一个语言设置页。在 applications/settings/ 下新增设置入口选择结果写回 locale 服务涉及中文文案的界面字符串资源也要按语言准备对应版本。编译固件并刷写验收先克隆仓库并编译git clone https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware ./fbt改完后执行./fbt flash_usb它会自动构建更新包并推送到 USB 连接的设备上无需拆机。验收按顺序过四个检查点主菜单与自改界面里的中文正常显示无问号残留重启设备后语言选择仍然保持日期、时间、单位等格式化输出与当前语言组合下表现正确连续滚动列表、切换应用时帧率没有明显下滑若卡顿就回头收紧字体子集。一份避坑清单字体体积失控Flash 空间有限全量中文字体几乎必挂。用字体子集工具只保留常用 3500 字左右转换前先看体积。编译或运行崩溃优先检查字体数组的编码方式是否与 u8g2 的压缩格式匹配对照 example_custom_font 的数组格式核对。第三方应用适配外部应用不会自动跟随你的语言改造资源加载处保留英文回退路径避免个别应用直接显示问号。别只验收自己改的界面文件浏览器、导入文件的文件名也走同一套字体抽查几个真实场景再算过。整条改造链路其实就是字体数据、字符串资源、语言设置三块拼起来每块都不大但缺一块屏幕上都会露出来。改完刷一次机对照上面的验收点走一遍结果不会有歧义。【免费下载链接】flipperzero-firmwareFlipper Zero firmware source code项目地址: https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表