最近在使用Qt开发界面的过程中,在一个界面中,使用了一个特殊的UTF-8字符“?” ,在开发环境(Windows10+Qt 5.9.2)能够正常在界面显示,但是到了工控机上(Wes7系统),“?”符号就变成了一个黑框。也就是所谓的乱码。
当我想让应用程序显示“?”的时候,实际上我是给了个字符QChar(’?‘),在内存中,表示形式是0x24C4。从内存的0x24c4转换为’?‘的过程,实际上是一个查表的过程,0x24C4是一个位置,在这个位置上,放着’?‘这个字符。这张表就是字体。能够出现黑框,说明该字体上并没有正确的字符。需要更换字体;但是你不可能为了一个字符,替换掉了之前用得好好的字体A。所以,现在有两个问题:1.如何找到一个合适的备用字体B。2.如何在字体A中找不到字符时自动替换到字体B。
在https://en.wikipedia.org/wiki/Unicode_font上面,可以看到主流字体对Utf8字符的支持程度,“?” 是一个Enclosed Alphanumerics 类型的字体,在对该类型完全支持的字体类型中,选取了Junicode字体作为备选字体B
在Wes7上安装字体,分为两个步骤。
1.将备用的字体拷贝到C:/windows /Fonts 目录下边
2.在注册表中注册该字体:打开注册表编辑器,定位到:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts,添加一个字符串值,并把数值设置为刚才拷进Fonts中的字体的文件名。
在Wes7中,字体由A切换到B是由系统完成的。所以这一步也只需要更改系统配置。
定位到打开注册表编辑器,定位到:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink\。我的主字体是Microsoft YaHei,所以找到Microsoft YaHei,把它的值加一行,在最后一行添加一行JUNICODE.TTF。这样,在Microsoft YaHei中找不到字符的时候,就会寻找Junicode.ttf中的字符来替换显示。
原文:https://www.cnblogs.com/liuchangjun/p/13601076.html