关于使用思源宋体显示生僻字’䶮’调研报告
调研目标
在病案管理系统中使用思源宋体来替代宋体进行应用中的中文显示,并调研生僻字显示逻辑,能够使用思源宋体显示生僻字’䶮’,文档内容按照两步执行,第一步是将生僻字加载至思源宋体中,第二步是将系统宋体替换为思源宋体。
应用现状
当前应用界面中文显示使用为字体为宋体
,在应用最初版本中无法显示生僻字’䶮’,在与北京同事协助下,通过对系统中宋体的字体文件进行修改后可以显示目标字体。
初始版本宋体无法显示如下图:
北京同事提供宋体文件修改后正常显示如下图:
调研测试环境为:
软件环境:amd架构,nfs-5.0-G212p版本
硬件环境:需要amd架构处理器
wine版本:上游wine-8.6
容器应用:病案管理系统
设置思源宋体
QA:在wine下我使用 otc下无法识别,这个跟wine的读取字体实现有关系,系统是可以正常使用这个字体的,但是wine下只能识别otf,关于这个细节差距我会在《wine下字体模块实现调研》详细说明,这里就不再赘述
- 从官网下载的思源宋体中取出
SourceHanSerifSC-Regular.otf
字体文件,现需获取’䶮’在wine中的编码并将此字体文件的编码设置此生僻字,在wine中开启font的通道,过滤日志读取生僻字’䶮’的UTF16编码为0xE0FA
- 网上对于字体编辑常用的两个工具,一个是开源的fontforge(多平台并免费),fontcreator(仅支持windonw并收费但容易上手),由于是实验阶段我就使用fontcreator工具,将目标字体打开
SourceHanSerifSC-Regular.otf
,搜索后发现’䶮’编码为0xE863,使用工具中的insert功能,设置编码0xE0FA为’䶮’字并导出字体文件。
设置wine注册表进行字体加载
wine的字体加载有多种路径大致分为四种
- 通过系统注册表中的指定路径
- 加载容器下的window/fonts路径字体
- 加载系统中的已存在字体
- 加载wine打包中的字体
为了不影响系统下显示方便字体设置,修改容器下注册表
HKEY_CURRENT_USER\Software\Wine\Fonts
,增加加载字体路径,并把思源宋体字体放在目标路径下,火锅的字体wfont也存放在此文件夹在容器应用启动后发现容器已加载目标字体
思源宋体
需要修改系统注册表,将系统的宋体全部替换为
思源宋体
,注册表路径为HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes显示现象如下
结论
wine下的字体显示是通过匹配度进行匹配的,在实际应用匹配时,思源字体与宋体差异度较大暂无法直接匹配上,需要通过注册表修改进行替换。在修改后也无法像原版宋体一样显示,但在字体官网展示对比中,宋体与思源宋体显示差异并不大,此方向需要继续调研,猜测宋体与思源宋体中的字体文件内容差距较大,列如字体衬线,宽度比例等导致。