首页 > 其他 > 详细

Wes7系统显示部分Utf8符号时为一个乱码框

时间:2020-09-13 21:52:57      阅读:119      评论:0      收藏:0      [点我收藏+]

最近在使用Qt开发界面的过程中,在一个界面中,使用了一个特殊的UTF-8字符“?” ,在开发环境(Windows10+Qt 5.9.2)能够正常在界面显示,但是到了工控机上(Wes7系统),“?”符号就变成了一个黑框。也就是所谓的乱码。
技术分享图片

1 总体思路

当我想让应用程序显示“?”的时候,实际上我是给了个字符QChar(’?‘),在内存中,表示形式是0x24C4。从内存的0x24c4转换为’?‘的过程,实际上是一个查表的过程,0x24C4是一个位置,在这个位置上,放着’?‘这个字符。这张表就是字体。能够出现黑框,说明该字体上并没有正确的字符。需要更换字体;但是你不可能为了一个字符,替换掉了之前用得好好的字体A。所以,现在有两个问题:1.如何找到一个合适的备用字体B。2.如何在字体A中找不到字符时自动替换到字体B。
技术分享图片

2 寻找合适的字体

在https://en.wikipedia.org/wiki/Unicode_font上面,可以看到主流字体对Utf8字符的支持程度,“?” 是一个Enclosed Alphanumerics 类型的字体,在对该类型完全支持的字体类型中,选取了Junicode字体作为备选字体B

3 在Wes7上安装字体

在Wes7上安装字体,分为两个步骤。
1.将备用的字体拷贝到C:/windows /Fonts 目录下边
2.在注册表中注册该字体:打开注册表编辑器,定位到:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts,添加一个字符串值,并把数值设置为刚才拷进Fonts中的字体的文件名。
技术分享图片

4 设置系统字体替换规则

在Wes7中,字体由A切换到B是由系统完成的。所以这一步也只需要更改系统配置。
定位到打开注册表编辑器,定位到:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink\。我的主字体是Microsoft YaHei,所以找到Microsoft YaHei,把它的值加一行,在最后一行添加一行JUNICODE.TTF。这样,在Microsoft YaHei中找不到字符的时候,就会寻找Junicode.ttf中的字符来替换显示。
技术分享图片

5 完成效果

技术分享图片

Wes7系统显示部分Utf8符号时为一个乱码框

原文:https://www.cnblogs.com/liuchangjun/p/13601076.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!