如何列出带有特定字母的字形的字体(在 Windows 上)?

ein*_*lum 6 fonts windows-7 language cataloging i18n

字体(在 Windows 中但不只是在 Windows 中)通常不包含所有语言的字形。实际上,它们中的大多数只有一种语言的字形,或者更确切地说,一种字母。

我想列出我的系统上的所有字体(或至少所有字体系列),这些字体具有特定字母表的字形。我知道一些应用程序在内部执行此操作(例如 Adob​​e Photoshop),而其他应用程序执行此操作(例如 Microsoft Word 的拉丁语与复杂的区别)。我自己怎么能做到这一点?

笔记:

  • 我对希伯来语特别感兴趣,但我的问题是针对一般情况。
  • 如果有帮助,请假设我安装了 Cygwin。

Ben*_*n N 2

基于这个 StackOverflow 答案,我编写了这个 PowerShell 脚本:

\n\n
$charId = [Int32][char]$args[0]\n[System.Reflection.Assembly]::LoadWithPartialName("PresentationCore") | Out-Null\n[System.Windows.Media.Fonts]::GetFontFamilies("C:\\Windows\\Fonts") | ForEach-Object {\n foreach ($face in $_.GetTypefaces()) {\n  $glyph = $null\n  $face.TryGetGlyphTypeface([ref]$glyph) | Out-Null\n  if ($glyph -and $glyph.CharacterToGlyphMap.TryGetValue($charId, [ref]0)) {\n   $_.Source.Split("#")[1]\n   break\n  }\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

将其另存为带有扩展名的文件ps1;我叫它fonttest.ps1

\n\n

在 PowerShell 让您运行脚本之前,您需要执行Set-ExecutionPolicy Unrestricted -Scope CurrentUser. 然后你可以像这样运行它:

\n\n
.\\fonttest.ps1 \xe4\xbd\xa0\n
Run Code Online (Sandbox Code Playgroud)\n\n

.\\很重要,您需要位于保存脚本的同一目录中。最后一个字符是您想要测试所有字体的字符。您将获得具有该字符字形的所有字体系列的打印输出。在我的计算机上,上述命令产生了以下结果:

\n\n
Microsoft JhengHei\nMicrosoft JhengHei UI\nMicrosoft YaHei\nMicrosoft YaHei UI\nYu Gothic\nMS Mincho\nMS PMincho\nDFKai-SB\nSimHei\nKaiTi\nSimSun\nNSimSun\nMeiryo\nMeiryo UI\nMS Gothic\nMS UI Gothic\nMS PGothic\nFangSong\nYu Mincho\nMingLiU\nPMingLiU\nMingLiU_HKSCS\nArial Unicode MS\nAdobe Fangsong Std\nAdobe Fan Heiti Std\nAdobe Heiti Std\nAdobe Kaiti Std\nKozuka Gothic Pro\nKozuka Mincho Pro\nAdobe Ming Std\nAdobe Song Std\nKozuka Gothic Pr6N\nKozuka Mincho Pr6N\nDengXian\nMicrosoft MHei\n
Run Code Online (Sandbox Code Playgroud)\n