找回密码
 立即注册
查看: 529|回复: 13

znFat振南文件系统如何在OLED上显示长文件名中文名

[复制链接]
  • TA的每日心情
    开心
    昨天 17:13
  • 签到天数: 158 天

    [LV.7]常住居民III

    13

    主题

    105

    回帖

    941

    积分

    高级会员

    积分
    941
    发表于 2024-1-6 11:28:48 | 显示全部楼层 |阅读模式
    尝试学习振南文件系统,用串口实现文件名和文件内容的读取,25Q128存储的是GBK字库,短文件名和长文件英文都可以完整的串口打印,OLED显示出来,长文件名中文名则截取显示前三个汉字,通过串口调试,长文件名输出的是unicode编码。我的思路是:把GBK字库做成unicode字库或者把unicode编码转换成GBK编码来实现,哪位老师有这方面的案例能否提供下解决办法呢?
    串口输出unicode编码.png

    打开的文件名

    打开的文件名
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 10:54
  • 签到天数: 163 天

    [LV.7]常住居民III

    9

    主题

    310

    回帖

    3785

    积分

    荣誉版主

    积分
    3785
    发表于 2024-1-6 16:17:54 | 显示全部楼层
    本帖最后由 kksk 于 2024-1-6 16:20 编辑

    如果你的字库是诸如
    1. {{"开", ...}, {"始", ...}, ...}
    复制代码
    这种对应形式的(汉字可见),可以直接利用支持编码转换的编辑器如vscode将对应字库文件转换为UTF-8。转换后在Keil内查看该文件会乱码(因为选择了GBK编码),但不影响使用。
    注意转换后要需要增加汉字字符串的长度。
    Screenshot_20240106_161612.png


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 17:13
  • 签到天数: 158 天

    [LV.7]常住居民III

    13

    主题

    105

    回帖

    941

    积分

    高级会员

    积分
    941
     楼主| 发表于 2024-1-6 17:59:00 | 显示全部楼层
    谢谢回复,没看懂什么意思?我的设想是以后做个简易MP3,读取MP3格式的文件,同时在OLED上显示对应的文件名,振南文件系统支持长文件名中文,但是读取出来的文件名是unicode编码规范,我的字库用的是GBK编码的,我考虑有没有专用的unicode转GBK编码的程序,这样在读取长文件名后调用,然后经过转换成GBK编码就能正常显示了。短文件名和长文件英文显示都是没有问题的,包括读取到的文件内容都是对的,就是想找下unicode转GBK的代码,目前还没有成功
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 17:13
  • 签到天数: 158 天

    [LV.7]常住居民III

    13

    主题

    105

    回帖

    941

    积分

    高级会员

    积分
    941
     楼主| 发表于 2024-1-6 18:05:32 | 显示全部楼层
    这个是串口和OLED显示图片
    读取文件内容.png

    video_20240106_180249.mp4

    3.43 MB, 下载次数: 14

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    576

    回帖

    1197

    积分

    荣誉版主

    积分
    1197
    发表于 2024-1-24 14:30:49 | 显示全部楼层
    你要做的就是把unicode码转换成GBK码,然后就可以显示了。

    转换方法为查表(二分搜索),我发的附件内是C语言的转换方法和表格。你去研究一下。其中包含两个表格, 一个是unicode转GBK, 另一个是GBK转unicode。

    由于 振南这个FAT内本身包含有GB2312转unicode的功能函数, 所以你只要做其中一个表格就可以了。

    现在有个问题就是表格很大,直接放在固件里肯定是放不下的.  必须放到外部存储器.

    以前在STM32上用过这个东西,当时是把表格放在W25QXX里,查表时逐项读入。

    所以你拿到这个代码时, 不能直接用的,先研究研究, 看懂转换方法以后, 把表格存在外部, 转换函数做一下对应的改变,就可以用了

    cc936.c (707.26 KB, 下载次数: 15)

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 17:13
  • 签到天数: 158 天

    [LV.7]常住居民III

    13

    主题

    105

    回帖

    941

    积分

    高级会员

    积分
    941
     楼主| 发表于 2024-1-24 16:29:04 | 显示全部楼层
    tzz1983 发表于 2024-1-24 14:30
    你要做的就是把unicode码转换成GBK码,然后就可以显示了。

    转换方法为查表(二分搜索),我发的附件内是C ...

    多谢您的回复,我也是查参考了STM32的CC936程序,利用外部FLASH存储UNICODE到GBK的映射表,采用二分法查找,把长名文件的UNICODE编码转成GBK编码,现在已经能正常显示了。只是我读取了SD卡中的文本文件,然后把TXT格式的文件显示出来,类似电子书这个功能,但是文本文件里的换行显示出来的是个乱码,请问这个问题应该如何解决呢?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 17:13
  • 签到天数: 158 天

    [LV.7]常住居民III

    13

    主题

    105

    回帖

    941

    积分

    高级会员

    积分
    941
     楼主| 发表于 2024-1-24 16:31:26 | 显示全部楼层
    显示的效果

    video_20240108_165001.mp4

    9.3 MB, 下载次数: 16

    点评

    你又来乱码,哈哈,做个东西真没那么容易,嘿嘿, 应该是细节上的问题吧,帮不到你,得自己找  发表于 2024-1-24 16:58
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:06
  • 签到天数: 137 天

    [LV.7]常住居民III

    4

    主题

    234

    回帖

    906

    积分

    高级会员

    积分
    906
    发表于 2024-1-24 16:35:33 | 显示全部楼层
    yanhui 发表于 2024-1-6 17:59
    谢谢回复,没看懂什么意思?我的设想是以后做个简易MP3,读取MP3格式的文件,同时在OLED上显示对应的文件名 ...

    我也在研究,请问下长文件名和短文件名不是一个编码方式吗?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 17:13
  • 签到天数: 158 天

    [LV.7]常住居民III

    13

    主题

    105

    回帖

    941

    积分

    高级会员

    积分
    941
     楼主| 发表于 2024-1-24 16:42:24 | 显示全部楼层
    长文件名输出的是UNICODE格式的编码,看一楼的串口输出信息,选中的那行数据,然后用在线UNICODE转GBK工具查看就能验证了。ZNFAT里对于长名文件的编码也有说明的
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 17:13
  • 签到天数: 158 天

    [LV.7]常住居民III

    13

    主题

    105

    回帖

    941

    积分

    高级会员

    积分
    941
     楼主| 发表于 2024-1-24 17:13:28 | 显示全部楼层

    这个问题就是GBK字库中没有换行符对应的编码,所以这里需要另外的思路,只是目前还没有找到方法
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-20 05:35 , Processed in 0.090661 second(s), 72 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表