
打印出每个Unicode字符;在您的终端中查看所有可能的字形
好吧...不是每个角色。我们不需要控制代码等,因此C , M和Z类中的字符不会打印。 (请参阅脚本末尾的一般类别值表。)
如果您的系统上没有/usr/share/unicode/UnicodeData.txt ,则将自动使用此脚本中的版本。 (v14.0.0,截至2021年9月从unicode.org出发)。
虽然FontTable将所有可打印的Unicode字符发送到STDOUT,但实际显示哪些字符取决于您在系统上安装了哪些字体以及是否设置了终端来使用它们。
可选地,可以使用-f字体名称将显示屏限制为该字体中定义的字形。 (需要FontConfig和Sixel图形。)
注意:Unicode联盟的“ Unicodedata.txt”文件未列出CJK字符,但可以在相邻的Unihan数据库中找到。如果您也想看到它们,请指定“ -s”
这是一个外壳脚本。只需下载fonttable并运行即可。
这是受到许多年轻人最喜欢的8位单线的启发:

FORT=0TO255:?CHR$(T);:NEXT:RUN
这是现代的等效物,是观看每个有效字形的一种方式。当然,我们不能使用简单的循环,因为Unicode的地址空间很大,而代码点只有一小部分是有效的字符。解决方案是仅打印在unicodedata.txt文件中指定的字符。
同样,并非分配的统一意识形态范围中的每个CJK代码点都是一个角色。通信只能打印Unihan数据库所知道的字符。 (unihan_dictionaryIndices.txt)。
从Unicode 14(2021)开始,我在Unicodedata.txt中计算了将近32,000个可打印字符。此外,Unihan数据库中有超过70,000个已知的CJK字符。
$ ./fonttable -s | awk '{print length($1)}'
31959
70805
(有些人声称数字要高得多,因为他们使用的是preplist.txt并计算分配的区域,无论是否存在这些代码点处的字符。)
fonttable: Show every Unicode character in your terminal.
Usage: fonttable [ -csu ] [ START..END ] [ -f FONT [ -p POINTSIZE ]]
START..END
Show range from START to END, inclusive. (Hexadecimal).
START defaults to 0, END defaults to infinity.
Multiple ranges are allowed: fonttable 2590..f 1fb00..ff
-f FONT | --font-name FONT
Display every Unicode glyph which is defined in FONT as
a sixel image directly in the terminal.
-p POINTSIZE | --point-size POINTSIZE
Change the size of the font rendered by -f.
-d FONT | --defined-in FONT
Like -f, but displays using the default terminal font,
not graphics. Useful to quickly see character coverage.
-c | --cache
Use cached UnicodeData.txt embedded in this script.
Usually the cached version is only used if the file is
not in /usr/share/unicode/ or the current directory.
-s | --show-unihan
Also show CJK data from the Unihan database.
The default is to not show characters that Unicode has
designated as mappings to other standards.
-u | --unihan-cache
Use a cached copy of the list of valid CJK characters
instead of looking for Unihan_DictionaryIndices.txt.
UnicodeData.txt contains around 30,000 characters.
Unihan adds another 70,000.
-f / -font -name选项就像范围选项一样,但仅显示在特定字体中定义的编码点(并在Unicode中标记为正常的可打印字符)。例如:
fonttable -f NotoSans
字体可以通过文件名指定:
fonttable -f /usr/share/fonts/X11/misc/neep-iso10646-1-10x20.pcf.gz
FontTable使用Sixel图形来绘制所请求的字体。如果您想使用特定的字体来限制显示哪些编码点,但仍将其显示在默认字体中,请使用-d FONT选项。
BUG:目前的六核动物处理非常幼稚。如果终端支持Sixels图形,则不会查询终端,每个字符高多少像素,也不是适当的文本颜色。
您的机器必须具有Fontconfig,这对于Debian GNU/Linux和衍生品是正确的,但可能并非如此。此外,字体名称必须以FontConfig的格式喜欢。例如:
fonttable -f LTCCaslon # Works
fonttable -f "LTC Caslon" # Works
fonttable -f "LTC Caslon Swash Long Regular" # Works
但是,碰巧的是:
fonttable -f Caslon # Does Not Work
fonttable -f "LTC Caslon Swash Long" # Does Not Work
如果您不确定该名称,请尝试fc-list | grep -i caslon 。您也可以直接指定字体文件名。例如:
fonttable ~/.local/share/fonts/P22CezannePro.ttf
一些装饰性和专家字体定义了没有映射到Unicode Codepoints或将其映射到私人使用的字形。这些字符将无法通过此脚本找到。例如:
fonttable -f AdobeWoodType # Shows no glyphs!
但是,通过一些努力,可以使用Fontforge等程序将这种字形移至Unicode代码点。

不同的终端程序和字体将为您带来截然不同的结果。
xxx todo
由于测试的终端现在已经很旧,因此需要重做本节。


Gnome-terminal-3.38.3使用freetype使用多个字体。对于某些字符,例如⑫(十二个数字),字形对于字符单元来说太宽,并且重叠不良。似乎没有设置可以告诉侏儒末端来收缩或截断过度宽的字形。

GNOME终端几乎没有用户可设置的首选项,但是您可以将“模棱两可的宽度”字符设置为宽(两个单元格)而不是狭窄。至少在此酷刑测试中,这有很大帮助。

但是,将模棱两可的宽度设置为宽不是灵丹妙药。例如,如果字形被用与默认值不同的纵横比的字体代替。例如,这是当选择“ DEC终端”字体(宽的两倍)时会发生什么:

请注意,使用此默认字体,即使宽阔的宽度设置为宽,字形也重叠。
像Gnome -terminal一样,XTERM在选择抗抗血液(vector)字体时也使用多个字体( -fa Inconsolata -fs 18 ),如果所选字体过于限制,则填充其他系统字体。 XTERM也可以与位图字体一起使用,但它们更棘手。
如果使用-fn指定位图字体,则XTERM将仅使用单个字体。这意味着您需要找到覆盖您使用的Unicode的每个部分的字体。这并不总是那么容易。
默认的Xterm字体称为“固定”,似乎是一个糟糕的选择,因为它的Unicode字符很少。但是,这是因为XTERM默认使用Latin-1版本。有一个“固定”的Unicode(10646)版本,在覆盖范围方面还不错。 “固定”也有广泛的亚洲字符版本,Xterm会自动检测和使用。因此,这不是一个不好的选择,它是预安装的。
xterm -fn '*fixed-medium-r-normal--20*10646*'

当您使用-fa指定抗逆字体时,Xterm已经通过使用其他字体来填充您缺少的字形。 (使用-fs指定点大小)。注意:抗脉络Xterm是指矢量字体,例如trueType,opentype和type 1。
虽然Xterm和Gnome末端都使用freetype呈现抗脉络化字体,但与Gnome末端不同,Xterm Xterm会执行特征细胞边界,并且不会让Glyphs重叠。取而代之的是,过度宽的字形被截断。这是否更好是品味问题。

请注意,Xterm默认值是使用用户指定的字体颜色而不是为字体内置的颜色。同样,这是一个品味问题,但应注意的是,当今大多数表情符号字体仅设计为颜色,因此某些范围的单色字体可能看起来过时或缺少字形。
如果您希望在运行通用时查看哪些字体已加载,请在运行Xterm之前将XFT_DEBUG环境变量设置为3。
XFT_DEBUG=3 xterm -fa DroidSansMono -fs 24
如果您希望强制XTERM仅使用所需的字体,则可以通过将limitFontsets x Resource设置为0来做到这一点。
xterm -fa DroidSansMono -xrm "XTerm*vt100.limitFontsets: 0"
请注意,Xterm将尝试自动检测您的字体是否也可以在UDPOUNSIZE版本(用于CJK)中可用。如果找不到它,则可以使用-fd指定单独的“倍增”字体。
xterm -fs 24 -fa DroidSansMono -fd DroidSansFallback -xrm "XTerm*vt100.limitFontsets: 0"
请注意,如果您没有安装特定的字体,即使您使用limitfontset:0,您也会显示为替代字体。同样,您可以使用xft_debug来找出正在发生的事情。
XFT_DEBUG=3 xterm -fs 24 -fa DroidSansMono -fd DroidSansFallback -xrm "XTerm*vt100.limitFontsets: 0"