web-dev-qa-db-ja.com

特定のアルファベットのグリフを含むフォントを一覧表示するにはどうすればよいですか(Windowsの場合)。

フォント(Windowsだけでなく)は通常、すべての言語のグリフを含んでいるわけではありません。実際、それらのほとんどには、1つの言語、つまり1つのアルファベットのグリフしかありません。

特定のアルファベットのグリフを持つ、システム上のすべてのフォント(または少なくともすべてのフォントファミリー)を一覧表示したいと思います。一部のアプリケーションはこれを内部で実行し(例:Adobe Photoshop)、他のアプリケーションは一種の実行を実行します(例:Microsoft Wordのラテン語と複雑な区別)。どうすれば自分でこれを行うことができますか?

ノート:

  • 私は特にヘブライ語に興味がありますが、私の質問は一般的な場合です。
  • それが役立つ場合は、Cygwinがインストールされていると仮定します。
6
einpoklum

この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
2
Ben N