硬汉嵌入式论坛

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

[μCGUI] uCGUI显示汉字是乱码

[复制链接]

20

主题

92

回帖

152

积分

初级会员

积分
152
发表于 2018-3-24 06:40:16 | 显示全部楼层 |阅读模式
各位早啊!
uCGUI显示汉字"你好",出来是乱码,首先怀疑了编码问题,按论坛里各位的指点,文件设置为utf-8格式,还是不行。
于是看了字库文件里的编码:你:0xC4E3,好:0xBAC3
在代码里把“你”“好”的编码用串口打印出来:0xC4, 0xE3, 0xBA, 0xC3
看上去编码和字库里的是对应的,是不是说明编码是没有错的?
还有,乱码其实不算乱,刚好四个特殊字符,对应的刚好是0xC4, 0xE3, 0xBA, 0xC3在ASCII表中的字符,为什么没有按双字节组合为汉字,而是单字节分别显示了呢?


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2018-3-24 09:34:07 | 显示全部楼层
你用的是早年的3.9x版本么,如果是的话,使用早期的这两个软件生成字库使用即可:

http://www.armbbs.cn/forum.php?m ... hlight=%D4%E7%C4%EA
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-24 12:46:56 | 显示全部楼层
本帖最后由 tovax 于 2018-3-24 12:49 编辑

是淘宝买的,说是最新有源码版的v3.98
按您发的工具试了,还是一样的,跟昨天显示的一样。
我用arm-none-eabi-gcc编译的,操作系统是win10-64bit,会不会跟编译器、操作系统有关呢?
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-24 13:08:20 | 显示全部楼层
本帖最后由 tovax 于 2018-3-24 13:09 编辑

四字节单独显示的原因是我没把字体切换过来,现在切换过来了,显示汉字的地方什么都没有。
(很奇怪,设置了默认字体,为什么还得代码去切换字体呢)
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-24 13:52:59 | 显示全部楼层
原因找到了:设置了默认字体是没错的,但是不指定生成的汉字字模的话,编译过程中字模数组被优化掉了,导致运行的时候找不到汉字点阵数据;只要调用一次汉字字模,编译器就不会优化了,也就是编译优化导致的。
谢谢eric2013!
顺便问一下,“extern GUI_CONST_STORAGE GUI_FONT GUI_Font颂?6;”
这是FontCvt V5.22生成的字模文件,为什么会有“颂”这样的乱码呢?试着把生成的.c保存为ANSI、UTF-8、UNICODE格式,都是显示这个样子。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2018-3-24 15:24:13 | 显示全部楼层
tovax 发表于 2018-3-24 13:52
原因找到了:设置了默认字体是没错的,但是不指定生成的汉字字模的话,编译过程中字模数组被优化掉了,导致 ...

你的字模文件命名成什么名字了,是不是电脑系统问题。方便的话,把你的关键步骤贴出来,我试试。
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-24 17:56:48 | 显示全部楼层
eric2013 发表于 2018-3-24 15:24
你的字模文件命名成什么名字了,是不是电脑系统问题。方便的话,把你的关键步骤贴出来,我试试。

1. 双击图标“FontCvt V5.22.exe”打开软件
2. Type of font to generate: Extended, Encoding: 16 Bit UNICODE
3. 点击OK
4. 选择字体:宋体,常规,12号,Uint of Size: Points
5. 点击确定
6. 保存,保存名字为“宋体16.c”
7. 右键“编辑”,也就是记事本打开,所有的子模数组都有乱码,显示“extern GUI_CONST_STORAGE GUI_FONT GUI_Font颂?6;”
8. 怀疑是编码问题,生成的原始文件为“ANSI”编码,把生成的文件在记事本中另存为“Unicode”“Unicode big endian”“UTF-8”也是一样显示乱码
9. 注:操作系统是win10 64bit
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2018-3-26 00:30:02 | 显示全部楼层
tovax 发表于 2018-3-24 17:56
1. 双击图标“FontCvt V5.22.exe”打开软件
2. Type of font to generate: Extended, Encoding: 16 Bit  ...

不好意思啊,忘了回复你消息了。
保存名字不能有中文,也就是你的第6步,你要弄个英文的。
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-26 09:56:15 | 显示全部楼层
eric2013 发表于 2018-3-26 00:30
不好意思啊,忘了回复你消息了。
保存名字不能有中文,也就是你的第6步,你要弄个英文的。

好的,晚点儿我试试看,谢谢你!
回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
发表于 2018-3-26 14:07:06 | 显示全部楼层
eric2013 发表于 2018-3-26 00:30
不好意思啊,忘了回复你消息了。
保存名字不能有中文,也就是你的第6步,你要弄个英文的。

对的,就是这个原因。文件名必须是英文。
感觉中文在很多领域不受待见。。。
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-26 21:00:08 | 显示全部楼层
本帖最后由 tovax 于 2018-3-26 21:09 编辑

是的,乱码确实是中文名字导致的,谢谢各位!
uCGUI是不能用这个字体生成工具是吧,字模数据的格式不一样,编译报错了。
我现在用的“ucGUI-gb2312汉字生成器v5”,不过这个工具麻烦的是没有定义为“GUI_CONST_STORAGE”,需要自己修改,这方面“FontCvt V5.22”做的更好点儿。
请问有没有更合适的工具适用于生成ucgui字模数据呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2018-3-27 01:14:23 | 显示全部楼层
tovax 发表于 2018-3-26 21:00
是的,乱码确实是中文名字导致的,谢谢各位!
uCGUI是不能用这个字体生成工具是吧,字模数据的格式不一样 ...

这两个:

http://www.armbbs.cn/forum.php?m ... hlight=%D4%E7%C4%EA
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-29 20:46:25 | 显示全部楼层
eric2013 发表于 2018-3-27 01:14
这两个:

http://www.armbbs.cn/forum.php?mod=viewthread&tid=21302&highlight=%D4%E7%C4%EA

1. 双击“UCGUIGenApp”打开软件
2. 选择字体:宋体,常规,12号
3. 字符集:中文GB2312
4. 点击:确定
5. 点击:导出GBK码.C文件
6. 生成的文件名为“SimSun_16.c”,编码为ANSI
7. 记事本打开,另存为“SimSun_16_UTF-8.c”,编码为UTF-8
8. 将SimSun_16_UTF-8.c加入工程
9. 将“extern GUI_FLASH const GUI_FONT GUI_FontHZ_SimSun_16;”添加到“GUI.H”中
10. 重新编译

这是我的操作步骤,英文字符可以正常显示,但是汉字完全没显示,只有一片黑色的背景,请问这是怎么回事儿呢?
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-29 21:40:24 | 显示全部楼层
eric2013 发表于 2018-3-27 01:14
这两个:

http://www.armbbs.cn/forum.php?mod=viewthread&tid=21302&highlight=%D4%E7%C4%EA

可以了,前几天下载的时候记得“切记不可操作鼠标”,今天就忘记了
谢谢eric2013

字模数据这么大,有没有可能性放在外部的spi flash中呢?有没有这方面的资料可以参考一下的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2018-3-30 03:03:23 | 显示全部楼层
tovax 发表于 2018-3-29 21:40
可以了,前几天下载的时候记得“切记不可操作鼠标”,今天就忘记了
谢谢eric2013

看我们新版emWin教程中GB2312或者GBK编码的汉字章节即可。
http://www.armbbs.cn/forum.php?m ... &extra=page%3D1
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-7-26 22:47:07 | 显示全部楼层
eric2013 发表于 2018-3-30 03:03
看我们新版emWin教程中GB2312或者GBK编码的汉字章节即可。
http://www.armbbs.cn/forum.php?mod=view ...

最近一直用你推荐的UCGUIGenApp生成汉字字库文件,是C格式的;
现在想生成SIF格式,请问哪个工具适用于cCGUI呢?
手册中介绍的FontCvt好像与uCGUI不兼容。
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-7-26 22:56:30 | 显示全部楼层
  1. GUI_CONST_STORAGE GUI_CHARINFO_EXT GUI_Font16_CharInfo[28738] = {
  2.    {   1,   1,   0,  14,   8, acGUI_Font16_0020 } /* code 0020, SPACE */
  3.   ,{   1,  11,   3,   3,   8, acGUI_Font16_0021 } /* code 0021, EXCLAMATION MARK */
  4.   ,{   6,   4,   1,   1,   8, acGUI_Font16_0022 } /* code 0022, QUOTATION MARK */
  5.   ,{   6,  11,   1,   3,   8, acGUI_Font16_0023 } /* code 0023, NUMBER SIGN */
  6.   ,{   6,  14,   1,   2,   8, acGUI_Font16_0024 } /* code 0024, DOLLAR SIGN */
  7.   ,{   7,  11,   0,   3,   8, acGUI_Font16_0025 } /* code 0025, PERCENT SIGN */
  8.   ,{   8,  11,   0,   3,   8, acGUI_Font16_0026 } /* code 0026, AMPERSAND */
复制代码


每行的前边那个逗号导致报错了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2018-7-27 01:33:07 | 显示全部楼层
tovax 发表于 2018-7-26 22:47
最近一直用你推荐的UCGUIGenApp生成汉字字库文件,是C格式的;
现在想生成SIF格式,请问哪个工具适用于c ...

SIF格式的只能用官方的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2018-7-27 01:36:19 | 显示全部楼层
tovax 发表于 2018-7-26 22:56
每行的前边那个逗号导致报错了

早期的字体生成工具:http://www.armbbs.cn/forum.php?mod=viewthread&tid=21302
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-7-27 19:32:21 | 显示全部楼层
eric2013 发表于 2018-7-27 01:33
SIF格式的只能用官方的。

用uCGUI3.98自带的uC-GUI-FontConvert-Demo.exe测试了一下,显示失败,看上去像二维码一样,步骤如下:
        a. uCGUI3.98自带的uC-GUI-FontConvert-Demo.exe
        b. Type of font to: Standard
        c. 16 Bit UNICODE
        d. Using OS
        e. OK
        f. 字体:宋体,字形:常规,大小:16,字符集:中文GB2312
        g. 确定
        h. File ===> Save as...
        i. 文件名:Font_Songti16.sif,保存类型:*.sif
        j. 保存
        k. 尽量不要移动鼠标及其他操作
        l. 将Font_Songti16.sif复制到虚拟U盘

代码部分是这样的:
  1.                         GUI_SIF_CreateFont(buffer, &GUI_Font_Songti16, GUI_SIF_TYPE_PROP);
  2.                         GUI_UC_SetEncodeUTF8();
  3.                         GUI_SetFont(&GUI_Font_Songti16);
  4.                         GUI_DispStringAt("秩序!", 0, 20 * 23);
复制代码


源文件编码也设置的UTF8

请问我的操作步骤有什么遗漏吗?
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-7-27 20:25:56 | 显示全部楼层
不单是汉字显示乱码,英文字符也是显示乱码
  1. GUI_DispStringAt("Hello, World!", 0, 20 * 22);
复制代码
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2018-7-28 01:28:59 | 显示全部楼层
tovax 发表于 2018-7-27 19:32
用uCGUI3.98自带的uC-GUI-FontConvert-Demo.exe测试了一下,显示失败,看上去像二维码一样,步骤如下:
...

不可以使用Demo版本,要使用正式版
给你个ST的吧
FontCvtST.exe (994 KB, 下载次数: 52)
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-7-28 07:23:58 | 显示全部楼层
eric2013 发表于 2018-7-28 01:28
不可以使用Demo版本,要使用正式版
给你个ST的吧

搞定!谢谢你
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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