硬汉嵌入式论坛

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

文件名通过FATFS从SD卡中读出来,用STemWIN显示不了中文,运用的是XBF字体,请各位

[复制链接]

2

主题

16

回帖

2

积分

新手上路

积分
2
发表于 2016-7-18 10:23:23 | 显示全部楼层 |阅读模式
文件名通过FATFS从SD卡中读出来,用STemWIN显示不了文件名的中文部分,运用的是XBF字体,请各位高手帮忙看看。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107122
QQ
发表于 2016-7-18 11:11:18 | 显示全部楼层
xbf字体显示的时候是用UTF-8编码,而短文件名的显示需要用GB编码转unicode再转UTF-8才可以可以用UTF-8显示。

长文件名是unicode编码的,需要unicode转utf-8才可以显示。
回复

使用道具 举报

2

主题

16

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2016-7-18 11:25:39 | 显示全部楼层
有没有调试成功的GB编码转unicode再转UTF-8的算法啊?我自己的调试了好久都没有成功。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107122
QQ
发表于 2016-7-18 11:29:25 | 显示全部楼层

回 zhangjie 的帖子

zhangjie:有没有调试成功的GB编码转unicode再转UTF-8的算法啊?我自己的调试了好久都没有成功。 (2016-07-18 11:25) 
没有。

使用Fatfs自带的gb转unicode转码表外加emWin自己支持的unicode转utf-8函数就行。
回复

使用道具 举报

2

主题

16

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2016-7-18 11:30:34 | 显示全部楼层
我现在用的是SDIO方式读SD卡
回复

使用道具 举报

2

主题

16

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2016-7-18 11:33:48 | 显示全部楼层
好,明白了,谢谢支持!
回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2016-7-18 11:37:08 | 显示全部楼层

回 eric2013 的帖子

eric2013:没有。

使用Fatfs自带的gb转unicode转码表外加emWin自己支持的unicode转utf-8函数就行。 (2016-07-18 11:29)
可以直接GBK转UTF8,要不?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107122
QQ
发表于 2016-7-18 11:43:38 | 显示全部楼层

回 novice 的帖子

novice:可以直接GBK转UTF8,要不? (2016-07-18 11:37) 
直接转还是这个思路。
回复

使用道具 举报

2

主题

16

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2016-7-18 11:47:56 | 显示全部楼层
要的,谢谢支持!
回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2016-7-18 15:04:13 | 显示全部楼层

回 eric2013 的帖子

eric2013:直接转还是这个思路。 (2016-07-18 11:43)
不,速度完全不一样,直接转是一步直接转换成UTF8,是查表操作。
原理很简单,先用PC软件把GBK转换成UTF8,然后把UTF8字符按GBK的寻址方式生成一个表。
平时按GBK计算公式得到的是点阵字库字模的位置,这个表是直接得到UTF8码。
回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2016-7-18 15:19:24 | 显示全部楼层
查表方式GBK直接转换成UTF8码。

gbk2utf8.rar (51 KB, 下载次数: 195)
回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2016-7-18 15:34:06 | 显示全部楼层
还有GBK和UNICODE互相转换,GB2312和UNICODE互相转换。
生成的代码体积至少比FATFS的cc936.c少40%以上。
比如GB2312和UNICODE互转,只需要45K字节空间,GBK和UNICODE互转只需要91K字节空间。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107122
QQ
发表于 2016-7-18 15:34:17 | 显示全部楼层

回 novice 的帖子

novice:查表方式GBK直接转换成UTF8码。

 (2016-07-18 15:19) 
非常感谢兄弟分享,有没有逆转换的表,也一起分享下吧,后面我也用下。[s:150]
回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2016-7-18 15:45:14 | 显示全部楼层

回 eric2013 的帖子

eric2013:非常感谢兄弟分享,有没有逆转换的表,也一起分享下吧,后面我也用下。[s:150] (2016-07-18 15:34)
UTF8直接转换成GBK的没有,UNICODE和GBK或GB2312互相转换的有。
要把UTF8转换成GBK,需要先将UTF8转换成UNICODE,然后再将UNICODE转换成GBK。
因为UTF8直接转GBK我没有找到有效的计算公式。
回复

使用道具 举报

2

主题

16

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2016-7-18 15:47:15 | 显示全部楼层
刚刚测试了了,这个方案可行,谢了![s:142]
回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2016-7-18 16:27:10 | 显示全部楼层
这是GB2312和UNICODE互相转换的代码。
这是我本人写的一个FAT文件系统的一部分,现在抽取出来分享。
还有另一个GBK和UNICODE互相转换的,等以后整理后再分享。

这份代码(包括GBK版本)和FATFS的cc936.c相比,特点是占用的体积更少,转换成UNICODE字符时速度更快(通过公式计算,速度为恒值)。

转换规则以微软的CP936代码页为依据。

gb2312_unicode.rar (71 KB, 下载次数: 195)
回复

使用道具 举报

610

主题

3063

回帖

4913

积分

至尊会员

积分
4913
发表于 2016-7-18 16:34:41 | 显示全部楼层

回 novice 的帖子

novice:这是GB2312和UNICODE互相转换的代码。
这是我本人写的一个FAT文件系统的一部分,现在抽取出来分享。
还有另一个GBK和UNICODE互相转换的,等以后整理后再分享。

这份代码(包括GBK版本)和FATFS的cc936.c相比,特点是占用的体积更少,转换成UNICODE字符时速度更快(通过公式计算, .. (2016-07-18 16:27)
这个牛哟,下载来备用,以后有空研究一下
回复

使用道具 举报

17

主题

121

回帖

172

积分

初级会员

积分
172
发表于 2017-11-14 22:06:49 | 显示全部楼层
楼主问题解决了吗?
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2022-1-4 11:51:37 | 显示全部楼层
novice 发表于 2016-7-18 15:19
查表方式GBK直接转换成UTF8码。

谢谢分享,测试可用!!!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 16:37 , Processed in 0.350296 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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