硬汉嵌入式论坛

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

[emWin] GB2312格式的中文字符怎么在TFT上显示

[复制链接]

262

主题

578

回帖

1364

积分

至尊会员

积分
1364
发表于 2019-9-2 13:17:48 | 显示全部楼层 |阅读模式
哎,各位大佬,我又来问中文显示的问题来了
使用GB2312格式的中文,用emWin要怎么显示出来呢。
我用keil5写的中文字符,如 <关闭> 对应的GB2312编码为 0xD5B1D8B9
在GUI初始时,使用了GUI_UC_SetEncodeUTF8(),现在屏上不显示中文了,只显示英文字符
原来中文字符是保存为UTF-8格式的,可以显示,但每个字符是3字节,2个字符就是6字节了。
现在不想用这个UTF-8的格式,想改成GB2312的。
要怎么才能显示呢?
回复

使用道具 举报

3

主题

28

回帖

37

积分

新手上路

积分
37
发表于 2019-9-2 14:09:47 | 显示全部楼层
可以做个GBK2UTF8的转换函数
回复

使用道具 举报

12

主题

104

回帖

140

积分

初级会员

积分
140
发表于 2019-9-2 15:59:44 | 显示全部楼层
GUI_UC_SetEncodeUTF8不调用这条不就得了?
回复

使用道具 举报

262

主题

578

回帖

1364

积分

至尊会员

积分
1364
 楼主| 发表于 2019-9-2 16:05:02 | 显示全部楼层
cz123123 发表于 2019-9-2 15:59
GUI_UC_SetEncodeUTF8不调用这条不就得了?

不调用肯定不显示呀,也是格式不对呀
回复

使用道具 举报

262

主题

578

回帖

1364

积分

至尊会员

积分
1364
 楼主| 发表于 2019-9-2 16:06:06 | 显示全部楼层
xinxinsky 发表于 2019-9-2 14:09
可以做个GBK2UTF8的转换函数

emWin下没有直接显示GB2312的API么?
看版主发的那个GB2312的全字库的方式,不知道能不能借用
回复

使用道具 举报

262

主题

578

回帖

1364

积分

至尊会员

积分
1364
 楼主| 发表于 2019-9-2 16:23:05 | 显示全部楼层
xinxinsky 发表于 2019-9-2 14:09
可以做个GBK2UTF8的转换函数

用GB2312的话,可以知道每个字符占用比如9像素的宽度,然后就知道一个中文字串占用多少像素。
而必胜UTF8的话,由于中文中混入英文字符的话,那么,就不好计算中文字串的宽度了,不好用于对齐显示这种
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107397
QQ
发表于 2019-9-3 02:07:19 | 显示全部楼层
回复

使用道具 举报

336

主题

2042

回帖

3055

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3055
发表于 2019-9-3 09:00:29 | 显示全部楼层
GB2312几乎都要淘汰了,还是使用utf8吧。 可以支持全球语言。 那点存储空间在现在都不是个事。 armfly也有gb2312的例程,可以参考。
回复

使用道具 举报

3

主题

28

回帖

37

积分

新手上路

积分
37
发表于 2019-9-3 09:17:18 | 显示全部楼层
jplzl10000 发表于 2019-9-2 16:23
用GB2312的话,可以知道每个字符占用比如9像素的宽度,然后就知道一个中文字串占用多少像素。
而必胜UTF ...

计算宽度可以在转换前计算, 还有在UTF8里也可以区分英文跟汉字的...
回复

使用道具 举报

262

主题

578

回帖

1364

积分

至尊会员

积分
1364
 楼主| 发表于 2019-9-3 12:22:51 | 显示全部楼层
xinxinsky 发表于 2019-9-3 09:17
计算宽度可以在转换前计算, 还有在UTF8里也可以区分英文跟汉字的...

GB2312转UTF-8的话,还要保存一个很大的转换表吧
在UTF-8里面怎么区分英文和汉字呢?
回复

使用道具 举报

3

主题

28

回帖

37

积分

新手上路

积分
37
发表于 2019-9-3 12:50:40 | 显示全部楼层
jplzl10000 发表于 2019-9-3 12:22
GB2312转UTF-8的话,还要保存一个很大的转换表吧
在UTF-8里面怎么区分英文和汉字呢?

几十K吧, 汉字的UTF8码高四位是1110, 英文在UTF8里就是ASC码, 不会超过0x7F.
回复

使用道具 举报

262

主题

578

回帖

1364

积分

至尊会员

积分
1364
 楼主| 发表于 2019-9-3 21:05:26 | 显示全部楼层
xinxinsky 发表于 2019-9-3 12:50
几十K吧, 汉字的UTF8码高四位是1110, 英文在UTF8里就是ASC码, 不会超过0x7F.

GB2312编码中,也是ASCII是小于0x7F的吧。
回复

使用道具 举报

3

主题

28

回帖

37

积分

新手上路

积分
37
发表于 2019-9-4 15:57:41 | 显示全部楼层
jplzl10000 发表于 2019-9-3 21:05
GB2312编码中,也是ASCII是小于0x7F的吧。

是的, utf8, asc中英文是统一的, unicode是前置00
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-30 07:03 , Processed in 0.193833 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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