字体(Windows 中但不限于此)通常不包含所有语言的字形。实际上,大多数字体仅包含一种语言的字形,或者更确切地说,一种字母表的字形。
我想列出系统上所有具有特定字母表字形的字体(或至少所有字体系列)。我知道有些应用程序内部会执行此操作(例如 Adobe Photoshop),而其他应用程序则类似地执行此操作(例如 Microsoft Word 的拉丁文与复杂文的区别)。我该如何自己执行此操作?
笔记:
- 我对希伯来语特别感兴趣,但我的问题是针对一般情况。
- 如果有帮助,假设我已经安装了 Cygwin。
答案1
基于这个 StackOverflow 答案,我写了这个 PowerShell 脚本:
$charId = [Int32][char]$args[0]
[System.Reflection.Assembly]::LoadWithPartialName("PresentationCore") | Out-Null
[System.Windows.Media.Fonts]::GetFontFamilies("C:\Windows\Fonts") | ForEach-Object {
foreach ($face in $_.GetTypefaces()) {
$glyph = $null
$face.TryGetGlyphTypeface([ref]$glyph) | Out-Null
if ($glyph -and $glyph.CharacterToGlyphMap.TryGetValue($charId, [ref]0)) {
$_.Source.Split("#")[1]
break
}
}
}
将其保存为具有扩展名的文件ps1
;我将其命名为fonttest.ps1
。
在 PowerShell 允许您运行脚本之前,您需要执行Set-ExecutionPolicy Unrestricted -Scope CurrentUser
。然后您可以像这样运行它:
.\fonttest.ps1 你
很.\
重要,你需要位于保存脚本的同一目录中。最后一个字符是你想要测试所有字体的字符。你将获得所有具有该字符字形的字体系列的打印输出。在我的计算机上,上述命令产生了以下内容:
Microsoft JhengHei
Microsoft JhengHei UI
Microsoft YaHei
Microsoft YaHei UI
Yu Gothic
MS Mincho
MS PMincho
DFKai-SB
SimHei
KaiTi
SimSun
NSimSun
Meiryo
Meiryo UI
MS Gothic
MS UI Gothic
MS PGothic
FangSong
Yu Mincho
MingLiU
PMingLiU
MingLiU_HKSCS
Arial Unicode MS
Adobe Fangsong Std
Adobe Fan Heiti Std
Adobe Heiti Std
Adobe Kaiti Std
Kozuka Gothic Pro
Kozuka Mincho Pro
Adobe Ming Std
Adobe Song Std
Kozuka Gothic Pr6N
Kozuka Mincho Pr6N
DengXian
Microsoft MHei