当记事本声称使用 Lucida 控制台但 Lucida 控制台没有这些字符时,它使用什么字体来显示希伯来语?

当记事本声称使用 Lucida 控制台但 Lucida 控制台没有这些字符时,它使用什么字体来显示希伯来语?

Courier New 有字符 \u05D0 希伯来字母 aleph

其他一些字体也有同样的效果,例如 Miriam 和 David。

在此处输入图片描述

我可以将其粘贴到记事本中

Lucida Console 没有该字符。字符映射显示 Lucida Console 没有该字符。

即使设置了 Lucida Console 字体,记事本仍会显示它

在此处输入图片描述

那么记事本使用什么字体?

答案1

Windows 7 有一项技术叫做复合字体

用于描述国际字体链接和后备逻辑 来源

它允许您拥有一个由多种具有有限字符定义范围的字体链接而成的虚拟字体。

默认复合字体称为全局用户界面位于文件
C:\Windows\Fonts\GlobalUserInterface.CompositeFont

您可以使用很棒的巴别地图工具来操作和了解 Unicode、复合字体和相关事物的实现。

另请检查字体回退分段评论本节MSDN 文章了解一些有趣的背景知识,了解如何构建这种复合字体以及什么是后备规则。


寻找字符的字体(基于以上信息):

  1. 在任何纯文本编辑器/查看器中,显示文件
    C:\Windows\Fonts\GlobalUserInterface.CompositeFont
  2. 在标签中<FontFamily.FamilyMaps>,找到你的角色的定义范围。
  3. FontFamilyMap在其属性中搜索包含您的范围的标签Unicode并获取该范围的字体(或字体列表)(存储在属性中Target)。
    例子:如果是性格05D0在文件中找到的范围是0590-05FF(希伯来语)
    和字体替换为:
    "Segoe UI, Tahoma, Arial, Arial Unicode MS, Microsoft Sans Serif, Lucida Sans Unicode"

    1. 如果只有一种字体,那么你就有它了。否则,让我们按顺序检查列表:运行 BabelMap
    2. 导航至指定角色
    3. 切换单选按钮复合字体单一字体
      或者:进入菜单字体>字体覆盖范围...并按计算按钮
    4. 按照步骤中出现的顺序切换字体3。第一个显示字形的字体就是您的字体。

笔记:有 4 种复合字体文件可用,但已验证适合您的情况的是GlobalUserInterface.CompositeFont

这种技术是可靠的,因为通过搜索定义,您可以执行与 Windows 相同的操作。

答案2

miro 的回答很精彩,我只是稍微换一种写法

有四个复合字体文件。

这四个分别是

C:\Windows\Fonts>dir *composite* /s/b

C:\Windows\Fonts\GlobalMonospace.CompositeFont
C:\Windows\Fonts\GlobalSansSerif.CompositeFont
C:\Windows\Fonts\GlobalSerif.CompositeFont
C:\Windows\Fonts\GlobalUserInterface.CompositeFont

C:\Windows\Fonts>

例如,查看一次就会发现, GlobalMonospace.CompositeFont有 0590-06FF,列出的后备字体只有一个,即 Courier New,它有 Aleph。但 Miro 确定这不是使用的复合文件,使用的复合文件是GlobalUserInterface.CompositeFont

打开此文件 C:\Windows\Fonts\GlobalUserInterface.CompositeFont

Aleph 是\u05D0这样的,你必须向下滚动文件才能到达我在图片中显示的位置,但那是要查看的部分

复合字体文件列出了一系列字体,作为各种 Unicode 字符的后备字体,包括 0590-06FF(包括 05D0/aleph 的范围)

    <FontFamilyMap  
        Unicode          = "0000-052F, 0590-06FF, 0750-077F, 1D00-1FFF, 2C60-2C7F, FB00-FB0F, FB1D-FBFF" 
        Target           = "Segoe UI, Tahoma, Arial, Arial Unicode MS, Microsoft Sans Serif, Lucida Sans Unicode"
        Scale            = "1.0"/>

在此处输入图片描述

Charmap 可以达到 FFFF,这已经足够了。Charmap 显示它不在 segoeUI 中。但它在 Tahoma 中。

在此处输入图片描述

Babelmap 很有趣,因为它可以显示 FFFF 之后的字符(在这种情况下没有必要),还可以显示系统上的哪些字体具有特定的 unicode 字符。但要查看记事本实际使用哪种字体作为后备字体,您需要检查 GlobalUserInterface.CompositeFont 文件。然后在 charmap 或 babelmap 中查找具有所需字形/unicode 字符的第一个字体。

Babelmap 有复合字体,但我认为它们是自定义字体,而不是 Windows 使用的自定义字体。但可以使用 babelmap 来搜索哪种字体有 unicode 字符,或者查看字体中的字符,甚至 FFFF 以外的字符。

相关内容