Fontlink(注册表中的 FontLink/SystemLink)在 Window 10 x64 中未按预期工作

Byz*_*zod 13 windows-registry fonts windows-10

我想要的是

Consolas用作 Notepad++ 的默认字体,但我希望在使用Consolas.

根据 The MSDN article,我可以将多种字体链接到,Consolas以便它可以显示它自己不支持的字符。

目标

  • 使用字体显示拉丁字符 Consolas
  • 显示中文和日文字符使用 Microsoft YaHei
  • 显示YaHei无法处理的符号使用Meiryo
  • 让系统处理其他Meiryo无法显示的字符

实现目标的步骤

  1. 添加一个REG_MULTI_SZ条目ConsolasHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink
  2. 设置值Consolas

    MSYH.TTC,Microsoft YaHei,128,96
    MSYH.TTC,Microsoft YaHei
    MEIRYO.TTC,Meiryo,128,85
    MEIRYO.TTC,Meiryo
    
    Run Code Online (Sandbox Code Playgroud)
  3. 注销 Windows,然后重新登录

Windows 7 中的实际结果

  1. 拉丁字符 (0-9,az,AZ) 和常用符号 (;:'" 等) 使用 Consolas
  2. 中文和日文字符显示使用 Microsoft YaHei
  3. 特殊符号显示使用 Meiryo
  4. 使用系统默认值显示上述字体不支持的其他字符和符号(idk 那是什么)

Windows 10 中的实际结果

  1. 拉丁字符 (0-9,az,AZ) 和常用符号 (;:'" 等) 使用 Consolas
  2. 中文和日文字符显示使用 Microsoft YaHei
  3. 特殊符号显示使用 Segoe UI Symbol
  4. 使用系统默认值显示上述字体不支持的其他字符和符号

附加信息

(我需要10个代表发布更多链接和图片,所以请点击图片链接查看测试用例结果截图并复制/粘贴url文本自己访问该网站)

这是一个测试,试图了解上述字体的字符覆盖率(以及更多)

使用的工具

  • 记事本: %WINDIR%/Notepad.exe
  • 巴别地图: http://www.babelstone.co.uk/Software/BabelMap.html
  • 测试字符串: ???A?

    ?(\u6211): A character available in both Chinese and Japanese
    ?(\u98ce): A Chinese only character
    ?(\u304a): A Japanese only character
    A(\u0041): A Latin character
    ?(\u2603): A unicode symbol
    
    Run Code Online (Sandbox Code Playgroud)

测试步骤

  1. 下载 BabelMap,打开它,然后将测试字符串复制到 Edit Buffer
  2. 选择Single Font单选按钮
  3. 勾选Simple Rendering复选框
  4. 通过单击右侧的下拉框选择任何字体 Single Font
  5. 观察中的字符字形 Edit Buffer
  6. Consolas如上所述设置字体链接,注销/登录生效
  7. 打开Notepad.exe,打开Format > Fonts菜单将字体设置为Consolas
  8. 粘贴测试字符串然后观察它

测试结果

测试用例结果对比

测试结果说明

  • Microsoft YaHei 无法显示雪人符号
  • Meiryo 没有汉字
  • Segoe UI Symbol 只包含符号
  • Yu Gothic类似于Meiryo但看起来不同
  • Consolas 专为拉丁文字设计。
  • 文本输入Notepad.exe使用 3 种不同的字体显示:

      ???: Microsoft YaHei
      A: Consolas
      ?: Segoe UI Symbol
    
    Run Code Online (Sandbox Code Playgroud)

    你可以说这肯定是Segoe UI Symbol因为那些雪人在不同的字体中是非常不同的

    但是,在这种情况下,我们希望Notepad.exe使用如下字体显示这些字符:

      ???: Microsoft YaHei
      A: Consolas
      ?: Meiryo
    
    Run Code Online (Sandbox Code Playgroud)

问题

  • 为什么Meiryo我们在fontlink 注册表中的设置被完全忽略了?
  • 如何在 Windows 10 中实现目标?

小智 1

微软决定删除 Windows 10 中的多种字体,其中之一是 Meriyo

https://docs.microsoft.com/en-us/windows/deployment/windows-10-missing-fonts

这可以通过观察 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink 来确认

默认情况下,它在 Windows 7 中必须存在,而在 Windows 10 中不会存在

您可以通过任何步骤在您的计算机上安装 Meriyo ttc 文件