硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3968|回复: 4
收起左侧

[RL-FlashFS] 尝试FlashFS的中文长文件名显示

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106919
QQ
发表于 2015-9-6 12:34:25 | 显示全部楼层 |阅读模式
使用支持短文件名的库FSN_CM3.lib显示中文文件名没问题,按照8.3格式进行显示。
而使用支持长文件名的库FS_CM3.lib显示中文文件名有问题,库内部不知道做了那种转码,
实际测试发现每一个中文汉字编码,打印出来后用一个字节编码进行表示,有些凌乱,先不搞了。
==========================================================
SD卡中原始存放的文件:
1.png

使用支持短文件名的库FSN_CM3.lib显示文件列表:
2.png

使用支持长文件名的库FS_CM3.lib显示文件列表:
3.png
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2015-9-6 15:13:01 | 显示全部楼层
其实你只要看看一个文件的长短文件名的编码就知道了,短文件名是ansi编码,如果是中文字符是gbk编码保存,flashfs直接就把短文件名拿上来显示,因为刚好是gbk编码所以在终端上显示成中文了。。。
长文件名存储的是unicode编码,所以它解释到文件名时一定有个转码方案,我估计就是那个西欧字符编码和unicode,这个转码是最简单的,只需要在1字节和2字节间互相表示即可

证据就在这里:我们知道的事情是什么,unicode编码如下11 62 ec 4e e5 77 53 90 84 76 8b 4e c5 60 2f 66 c0 4e 48 4e  ,很明显可以看到你用长文件名显示时刚刚就是获得获得低字节,昨天我在U盘用flashfs新建个文件:哈,ansi编码b9 fe,保存后的unicode是b9 00 fe 00,这在电脑上转换成ansi就是个乱码,但是在flashfs上显示时因为unicode会被截断成1字节,又变成 b9 fe,所以在终端上看到的反而正确显示的 哈 这个ansi编码


综上可知,flashfs处理长短文件名的方法简单粗暴,将输入的文件名编码,直接截取部分到短文件名处,直接扩展成双字节编码就是对应的unicode编码存到长文件名处
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2015-9-6 15:30:14 | 显示全部楼层
悲剧了,keil官方表明rl-flashfs只支持ascii编码,连西欧字母编码都不支持
rl-flash并不支持中文名
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106919
QQ
 楼主| 发表于 2015-9-6 16:00:05 | 显示全部楼层

回 myxiaonia 的帖子

myxiaonia:悲剧了,keil官方表明rl-flashfs只支持ascii编码,连西欧字母编码都不支持
rl-flash并不支持中文名
 (2015-09-06 15:30) 
非常感谢告知[s:151]
回复

使用道具 举报

11

主题

103

回帖

31

积分

初级会员

积分
31
发表于 2015-12-4 13:54:43 | 显示全部楼层
[s:149] 厉害
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-10 08:59 , Processed in 0.289806 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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