给定一个特定的 Unicode 字符,比方说吗,我如何迭代系统中安装的所有字体并列出包含该字符字形的字体?
我已经在 .NET 4.0 上对此进行了测试,您需要添加对 PresentationCore 的引用才能使字体和字体类型正常工作。另请检查 Fonts.GetFontFamilies 重载。
using System;
using System.Collections;
using System.Collections.Generic;
using System.Windows.Markup;
using System.Windows.Media;
class Program
{
public static void Main(String[] args)
{
PrintFamiliesSupportingChar('a');
Console.ReadLine();
PrintFamiliesSupportingChar('â');
Console.ReadLine();
PrintFamiliesSupportingChar('嗎');
Console.ReadLine();
}
private static void PrintFamiliesSupportingChar(char characterToCheck)
{
int count = 0;
ICollection<FontFamily> fontFamilies = Fonts.GetFontFamilies(@"C:\Windows\Fonts\");
ushort glyphIndex;
int unicodeValue = Convert.ToUInt16(characterToCheck);
GlyphTypeface glyph;
string familyName;
foreach (FontFamily family in fontFamilies)
{
var typefaces = family.GetTypefaces();
foreach (Typeface typeface in typefaces)
{
typeface.TryGetGlyphTypeface(out glyph);
if (glyph != null && glyph.CharacterToGlyphMap.TryGetValue(unicodeValue, out glyphIndex))
{
family.FamilyNames.TryGetValue(XmlLanguage.GetLanguage("en-us"), out familyName);
Console.WriteLine(familyName + " supports ");
count++;
break;
}
}
}
Console.WriteLine();
Console.WriteLine("Total {0} fonts support {1}", count, characterToCheck);
}
}
您可以使用 albatross 命令行工具(https://gitlab.com/islandoftex/albatross/;也包含在 texlive 或 miktex 等 tex 发行版中)。
如果运行
albatross 嗎
,您将获得包含该字符的所有字体的列表:
__ __ __
.---.-.| | |--.---.-.| |_.----.-----.-----.-----.
| _ || | _ | _ || _| _| _ |__ --|__ --|
|___._||__|_____|___._||____|__| |_____|_____|_____|
Unicode code point [55CE] mapping to 嗎
┌─────────────────────────────────────────────────────────────────────────────┐
│ Font name │
├─────────────────────────────────────────────────────────────────────────────┤
│ .Aqua Kana,.Aqua かな │
├─────────────────────────────────────────────────────────────────────────────┤
│ .Aqua Kana,.Aqua かな,.Aqua Kana Bold,.Aqua かな ボールド │
├─────────────────────────────────────────────────────────────────────────────┤
│ .Hiragino Kaku Gothic Interface │
├─────────────────────────────────────────────────────────────────────────────┤
│ .Hiragino Sans GB Interface │
├─────────────────────────────────────────────────────────────────────────────┤
│ .LastResort │
├─────────────────────────────────────────────────────────────────────────────┤
│ .PingFang HK,.蘋方\-港,.苹方\-港 │
├─────────────────────────────────────────────────────────────────────────────┤
│ .PingFang SC,.蘋方\-簡,.苹方\-简 │
├─────────────────────────────────────────────────────────────────────────────┤
│ .PingFang TC,.蘋方\-繁,.苹方\-繁 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Adobe Fangsong Std,Adobe 仿宋 Std,Adobe Fangsong Std R,Adobe 仿宋 Std R │
├─────────────────────────────────────────────────────────────────────────────┤
│ Adobe Heiti Std,Adobe 黑体 Std,Adobe Heiti Std R,Adobe 黑体 Std R │
├─────────────────────────────────────────────────────────────────────────────┤
│ Adobe Kaiti Std,Adobe 楷体 Std,Adobe Kaiti Std R,Adobe 楷体 Std R │
├─────────────────────────────────────────────────────────────────────────────┤
│ Adobe Ming Std,Adobe 明體 Std,Adobe 明體 Std L,Adobe Ming Std L │
├─────────────────────────────────────────────────────────────────────────────┤
│ Adobe Song Std,Adobe 宋体 Std,Adobe Song Std L,Adobe 宋体 Std L │
├─────────────────────────────────────────────────────────────────────────────┤
│ Arial Unicode MS │
├─────────────────────────────────────────────────────────────────────────────┤
│ GB18030 Bitmap │
├─────────────────────────────────────────────────────────────────────────────┤
│ Heiti SC,黑體\-簡,黒体\-簡,Heiti\-간체,黑体\-简 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Heiti TC,黑體\-繁,黒体\-繁,Heiti\-번체,黑体\-繁 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Kaku Gothic Pro,ヒラギノ角ゴ Pro,Hiragino Kaku Gothic Pro │
│ W3,ヒラギノ角ゴ Pro W3 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Kaku Gothic Pro,ヒラギノ角ゴ Pro,Hiragino Kaku Gothic Pro │
│ W6,ヒラギノ角ゴ Pro W6 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Kaku Gothic ProN,ヒラギノ角ゴ ProN,Hiragino Kaku Gothic ProN │
│ W3,ヒラギノ角ゴ ProN W3 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Kaku Gothic ProN,ヒラギノ角ゴ ProN,Hiragino Kaku Gothic ProN │
│ W6,ヒラギノ角ゴ ProN W6 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Maru Gothic Pro,ヒラギノ丸ゴ Pro,Hiragino Maru Gothic Pro │
│ W4,ヒラギノ丸ゴ Pro W4 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Maru Gothic ProN,ヒラギノ丸ゴ ProN,Hiragino Maru Gothic ProN │
│ W4,ヒラギノ丸ゴ ProN W4 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Mincho Pro,ヒラギノ明朝 Pro,Hiragino Mincho Pro W3,ヒラギノ明朝 │
│ Pro W3 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Mincho Pro,ヒラギノ明朝 Pro,Hiragino Mincho Pro W6,ヒラギノ明朝 │
│ Pro W6 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Mincho ProN,ヒラギノ明朝 ProN,Hiragino Mincho ProN W3,ヒラギノ明朝 │
│ ProN W3 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Mincho ProN,ヒラギノ明朝 ProN,Hiragino Mincho ProN W6,ヒラギノ明朝 │
│ ProN W6 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans GB,冬青黑體簡體中文,冬青黑体简体中文,冬青黑體簡體中文 │
│ W3,Hiragino Sans GB W3,冬青黑体简体中文 W3 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans GB,冬青黑體簡體中文,冬青黑体简体中文,冬青黑體簡體中文 │
│ W6,Hiragino Sans GB W6,冬青黑体简体中文 W6 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W1,ヒラギノ角ゴシック W1 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W2,ヒラギノ角ゴシック W2 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W3,ヒラギノ角ゴシック W3 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W4,ヒラギノ角ゴシック W4 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W5,ヒラギノ角ゴシック W5 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Hiragino Sans,ヒラギノ角ゴシック,Hiragino Sans W6,ヒラギノ角ゴシック W6 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Meiryo,メイリオ │
├─────────────────────────────────────────────────────────────────────────────┤
│ MS Gothic,MS ゴシック │
├─────────────────────────────────────────────────────────────────────────────┤
│ MS Mincho,MS 明朝 │
├─────────────────────────────────────────────────────────────────────────────┤
│ MS PGothic,MS Pゴシック │
├─────────────────────────────────────────────────────────────────────────────┤
│ MS PMincho,MS P明朝 │
├─────────────────────────────────────────────────────────────────────────────┤
│ PingFang HK,蘋方\-港,苹方\-港 │
├─────────────────────────────────────────────────────────────────────────────┤
│ PingFang SC,蘋方\-簡,苹方\-简 │
├─────────────────────────────────────────────────────────────────────────────┤
│ PingFang TC,蘋方\-繁,苹方\-繁 │
├─────────────────────────────────────────────────────────────────────────────┤
│ PMingLiU,新細明體 │
├─────────────────────────────────────────────────────────────────────────────┤
│ SimSun,宋体 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Songti SC,宋體\-簡,宋体\-简 │
├─────────────────────────────────────────────────────────────────────────────┤
│ Songti TC,宋體\-繁,宋体\-繁 │
├─────────────────────────────────────────────────────────────────────────────┤
│ STSong │
└─────────────────────────────────────────────────────────────────────────────┘
如果您知道代码点的十六进制值,则可以使用仅使用 fontconfig 实用程序的单行代码来完成此操作:
$ fc-list --format='%{postscriptname}\n' ':charset=55ce'
Unifont
找到六角形更加困难。这是一种方法:
$ echo -n 嗎 | iconv -f utf-8 -t ucs4 | od -t x1
0000000 00 00 55 ce
0000004