XTerm 不能正確顯示 一些 unicode 字元?
我對 XTerm 和 Unicode 沒有一般問題。在大多數情況下,事情正在發揮作用。這很好用:
$ echo "¿dónde está la llama?" ¿dónde está la llama?
就像這樣:
$ echo -e "\xE2\x98\xA0" ☠
但這失敗了*:*
$ echo -e "\xE2\xA4\xB7"
而不是預期的輸出(⤷,又名ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS)我得到了可怕的盒子。我目前正在使用:
xterm*faceName: Hack Regular:size=12:antialias=true
這與我使用的字型相同
gnome-terminal
,可以正確顯示相同的字元。我也嘗試過使用其他各種等寬字型(Droid Sans Mono、DejaVu Sans Mono、Liberation Mono),它們在 XTerm 中都有相同的行為(但在其他地方工作正常)。事實上,查看\u2620
正確顯示和\u2937
不正確顯示之間的字元,有許多字元在 XTerm 中似乎無法正確顯示:$ python >>> for x in range(0x2620, 0x2938): ... print(unichr(x))
我想了解這裡發生了什麼。為什麼 XTerm 無法顯示其中一些字元,而其他字元卻沒有?
簡短:xterm 使用單一字型(雙寬字元的特殊情況除外),而其他終端使用附加字型(並且它們使用那些字型來表示您請求的字型中沒有的字元)。
long:您感興趣的字元不是字型的一部分,在 Debian中看起來類似於fonts-hack-tty 。缺少的程式碼是 0x2937,您可以看到使用
xfd -fa hack
的不是字型提供的(提示:頁面上的第一個是 0x29 8 7):字型的簡短描述給出了它的預期用途:
沒有多餘的裝飾。沒有噱頭。哈克是手工修飾和光學平衡的,是程式碼的主力面。
其中(因為“程式碼”通常是 POSIX 字元集,加上人們認為好的評論)可能很小。這個例子比平常有更多的非 POSIX 字元。從 ASCII+Latin1 開始:
字型中有幾百個字形(需要另外十幾個螢幕截圖才能顯示這些字形,儘管一半以上顯示了少量字形)。例如,部分支持第二頁:
在評論的提示下,我跟踪了 gnome-terminal 以查看它載入了這些字型檔:
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf /usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoBd.ttf /usr/share/fonts/truetype/ttf-bitstream-vera/VeraSeBd.ttf /usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf /usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf
並且 0x2937 由最後一個提供。實際細節可能因您的配置而異。