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

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2025-05-02 09:12:37

14

主题

128

回帖

2036

积分

金牌会员

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

打开的文件名

打开的文件名
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:328
  • 最近打卡:2025-03-09 19:40:01

9

主题

328

回帖

4501

积分

荣誉版主

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

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


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2025-05-02 09:12:37

14

主题

128

回帖

2036

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2025-05-02 09:12:37

14

主题

128

回帖

2036

积分

金牌会员

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

video_20240106_180249.mp4

3.43 MB, 下载次数: 99

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

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

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

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

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

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

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

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

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2025-05-02 09:12:37

14

主题

128

回帖

2036

积分

金牌会员

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

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2025-05-02 09:12:37

14

主题

128

回帖

2036

积分

金牌会员

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

video_20240108_165001.mp4

9.3 MB, 下载次数: 101

点评

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:414
  • 最近打卡:2025-05-02 09:17:58

5

主题

296

回帖

2034

积分

金牌会员

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2025-05-02 09:12:37

14

主题

128

回帖

2036

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:453
  • 最近打卡:2025-05-02 09:12:37

14

主题

128

回帖

2036

积分

金牌会员

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

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 22:11 , Processed in 0.331143 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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