我要提问
ARTICLE DETAIL

资讯详情

前沿编程新知与开发实战干货的深度解读。

Flipper Zero 中文显示为什么全是方块?按 3 个断点逐个查

Flipper Zero 中文显示为什么全是方块?按 3 个断点逐个查 Flipper Zero 中文显示为什么全是方块按 3 个断点逐个查【免费下载链接】flipperzero-firmwareFlipper Zero firmware source code项目地址: https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware在 flipperzero-firmware 这个固件仓库里做 Flipper Zero 中文显示相关的改动卡住的点其实就三个字库没有汉字字形、界面文案没有可翻译的资源层、字符串编码或注入位置不对。这篇按你看到什么症状 → 大概率根因在哪 → 去哪个文件确认 → 具体改什么的顺序走一遍照着排查基本不会绕远路。断点一字库里根本没有汉字症状汉字全变方块或空白但英文、数字、标点都正常。根因大概率在字库。固件的画布模块只挂了四种内置字体全是拉丁字母的没有汉字字形// canvas.c 里内置字体的选择逻辑只有 Latin 字体 FontPrimary - helvB08 // 8px 常规 FontSecondary - haxrcorp4089 FontKeyboard - profont11 FontBigNumbers - profont22所以把字体换成中文这件事在默认固件里无解——不是参数没调好是字形压根不在。去哪个文件确认[lib/u8g2/](https://link.gitcode.com/i/81be32bef27a773e8f36114d0aa81c2c)下的u8g2_fonts.c编译进了哪些字体[applications/services/gui/canvas.c](https://link.gitcode.com/i/13af4d3abd3f052da89f381d41413504)里的canvas_set_font看当前挂的是什么。具体改什么把想要的中文字体推荐文泉驿一类的开源黑体做 u8g2 字库子集化——只保留你要显示的那几个汉字和必要的标点几百 KB 的 ROM 预算塞不下整本字库。仓库里现成的范例是 applications/examples/example_custom_font/example_custom_font.c它演示了把 u8g2 字库数组写进源码再调canvas_set_custom_u8g2_font()注入的完整链路这就是 Flipper Zero 字体替换的标准姿势canvas_set_custom_u8g2_font(canvas, u8g2_font_your_subset);改完看到的变化调用了这行的界面能出汉字没调的地方照旧是方块。这就是为什么很多人只在自己的应用里看到中文系统界面还是英文加方块——字体注入是按画布生效的不是全局的。这个坑我蹲了两天一开始以为哪里漏了个配置项。断点二文案没有可翻译的资源层症状字库换好了自己的应用里中文正常但系统菜单、设置项全是英文或者想加个中文语言选项翻遍设置也找不到入口。根因大概率在资源层而不是渲染。先看[applications/services/locale/locale.h](https://link.gitcode.com/i/194ea47bf3e1d83a4c53fdb8f2a1dece)里面的枚举只有LocaleMeasurementUnits公制/英制、LocaleTimeFormat12/24 小时、LocaleDateFormatDMY/MDY/YMD。整个 locale 服务管的是数字格式不是语言——固件里不存在语言中文这个状态Flipper Zero locale 配置里没有语言这一项想加得自己扩枚举、加设置项、再持久化。去哪个文件确认主菜单文案散落在 applications/main/ 和 applications/settings/ 各应用的 .c 里直接字符串绘制。这就是 Flipper Zero 字符串资源中文翻译要面对的现实先把散落的文案集中到资源文件再整体翻一遍比逐句搜索替换靠谱得多。具体改什么新建中文文案文件UTF-8 保存把界面绘制的字符串逐条替换为资源引用。改完看到的变化对应界面从英文变中文菜单布局宽度最好顺手压一下——中文字形接近正方形一行能装的字符数比英文少Settings 五个字的位置未必放得下设置两个字加图标。断点三编码和注入位置症状字库、文案都齐了个别汉字还是乱码或者整个应用界面都是不相干的字符。根因大概率是源码文件编码。中文字符串走 UTF-8如果某段源码被编辑器存成了 GBK编译烧录后就是稳定乱码而且重启不消失看着特别像字库问题。用file xxx.c确认文件是 UTF-8 即可这个坑属于五分钟排查项。注入位置也要逐模块看每个 UI 模块menu、dialog_ex、popup、byte_input 等都各自调canvas_set_font想让全局出中文就得逐个替换成自定义字库只改自己应用的话在应用的绘制回调里调canvas_set_custom_u8g2_font就行不碰系统界面。常见误判看起来跟中文显示有关其实是别的 bugNFC 标签名字母对不上号——那是 SD 卡上文件名编码的问题设备对 8.3 兼容文件名和 GBK 命名本来就不感冒跟字库无关。BadUSB 脚本里输入中文变成乱码——那是目标机器终端的编码不匹配脚本内容在设备端其实没变。编译后所有界面乱码且无法恢复——先查源码文件编码90% 是 GBK 保存别急着动字库。只想花 5 分钟的快速路径一条最短路线u8g2 子集化工具导出字库数组 → 仿照 example_custom_font 的写法注入canvas_set_custom_u8g2_font→ 编译烧录./fbt flash_usb字库管字形资源文件管文案locale 管数字格式——哪个断点没打通对应那一层就继续是方块或英文。排查顺序反过来走也成立先确认自己卡在哪一层再决定动哪个文件。【免费下载链接】flipperzero-firmwareFlipper Zero firmware source code项目地址: https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表