znFat振南文件系统如何在OLED上显示长文件名中文名
尝试学习振南文件系统,用串口实现文件名和文件内容的读取,25Q128存储的是GBK字库,短文件名和长文件英文都可以完整的串口打印,OLED显示出来,长文件名中文名则截取显示前三个汉字,通过串口调试,长文件名输出的是unicode编码。我的思路是:把GBK字库做成unicode字库或者把unicode编码转换成GBK编码来实现,哪位老师有这方面的案例能否提供下解决办法呢?本帖最后由 kksk 于 2024-1-6 16:20 编辑
如果你的字库是诸如
{{"开", ...}, {"始", ...}, ...}
这种对应形式的(汉字可见),可以直接利用支持编码转换的编辑器如vscode将对应字库文件转换为UTF-8。转换后在Keil内查看该文件会乱码(因为选择了GBK编码),但不影响使用。
注意转换后要需要增加汉字字符串的长度。
谢谢回复,没看懂什么意思?{:cry:}我的设想是以后做个简易MP3,读取MP3格式的文件,同时在OLED上显示对应的文件名,振南文件系统支持长文件名中文,但是读取出来的文件名是unicode编码规范,我的字库用的是GBK编码的,我考虑有没有专用的unicode转GBK编码的程序,这样在读取长文件名后调用,然后经过转换成GBK编码就能正常显示了。短文件名和长文件英文显示都是没有问题的,包括读取到的文件内容都是对的,就是想找下unicode转GBK的代码,目前还没有成功 这个是串口和OLED显示图片 你要做的就是把unicode码转换成GBK码,然后就可以显示了。
转换方法为查表(二分搜索),我发的附件内是C语言的转换方法和表格。你去研究一下。其中包含两个表格, 一个是unicode转GBK, 另一个是GBK转unicode。
由于 振南这个FAT内本身包含有GB2312转unicode的功能函数, 所以你只要做其中一个表格就可以了。
现在有个问题就是表格很大,直接放在固件里肯定是放不下的.必须放到外部存储器.
以前在STM32上用过这个东西,当时是把表格放在W25QXX里,查表时逐项读入。
所以你拿到这个代码时, 不能直接用的,先研究研究, 看懂转换方法以后, 把表格存在外部, 转换函数做一下对应的改变,就可以用了
tzz1983 发表于 2024-1-24 14:30
你要做的就是把unicode码转换成GBK码,然后就可以显示了。
转换方法为查表(二分搜索),我发的附件内是C ...
多谢您的回复,我也是查参考了STM32的CC936程序,利用外部FLASH存储UNICODE到GBK的映射表,采用二分法查找,把长名文件的UNICODE编码转成GBK编码,现在已经能正常显示了。只是我读取了SD卡中的文本文件,然后把TXT格式的文件显示出来,类似电子书这个功能,但是文本文件里的换行显示出来的是个乱码,请问这个问题应该如何解决呢? 显示的效果 yanhui 发表于 2024-1-6 17:59
谢谢回复,没看懂什么意思?我的设想是以后做个简易MP3,读取MP3格式的文件,同时在OLED上显示对应的文件名 ...
我也在研究,请问下长文件名和短文件名不是一个编码方式吗? 长文件名输出的是UNICODE格式的编码,看一楼的串口输出信息,选中的那行数据,然后用在线UNICODE转GBK工具查看就能验证了。ZNFAT里对于长名文件的编码也有说明的 yanhui 发表于 2024-1-24 16:31
显示的效果
这个问题就是GBK字库中没有换行符对应的编码,所以这里需要另外的思路,只是目前还没有找到方法{:lol:}
页:
[1]
2