X11

libvte unicode 字型處理

  • November 11, 2019

我正在嘗試顯示一些 ANSI 文本,其中包含來自Unicode 私人使用區域的字元。我有兩種包含這些字元的字型。第一個是 PCF(點陣圖)字型,第二個是 TTF 字型,從第一個生成並包含完全相同的字形集。

PCF 字型在 Debian 和 Ubuntu 中的“tv-fonts”包中可用,稱為“teletext”。TTF 版本可在此處獲得。

我通過將終端配置為使用我的一種字型來顯示此文本文件,然後對該文件進行分類。

這會在不同的終端產生不同的結果:

Xterm 只能使用 PCF 字型。xterm -fg white -bg black -fn teletext我看到了正確的輸出:

xterm pcf

Terminator 可以同時使用 PCF 和 TTF 字型。使用 PCF 字型,輸出是正確的:

終結者pcf

但是,如果我告訴終結者使用 TTF 字型,輸出會在大的“BBC”標誌之後包含一個意外字元:

終結者 ttf

有問題的字元是,unicode 0xee20。它在 PCF 和 TTF 字型中都是一個空白區域。

當使用 xfce4-terminal 時,結果是一樣的。Terminator 和 Xfce4-terminal 都使用 libvte。

所以我的問題:

  • 為什麼 libvte 顯示錯誤的字形?
  • 為什麼 TTF 和 PCF 的行為不同?(請記住,兩種字型都包含一組相同的字形。)

更新:似乎這實際上與 VTE 無關,而是與 Gtk 相關,並且可能與 X11 本身有關。在文本編輯器中設置​​字型時可以看到相同的結果,例如滑鼠墊(使用 GtkSourceView。)

實際上,xterm(and xfd) 可以使用 TrueType 字型,使用該-fa選項。使用後者,您可以看到0xee20字型中缺少的內容:

在此處輸入圖像描述

鑑於此,xterm 將顯示缺失的字形(因為它僅使用一種字型)。很可能 vte 也在做同樣的事情,因為它可能使用的備份字型都沒有這個特定的私人使用程式碼。

為了比較,這裡是xfd顯示 PCF 字型(確實有字形)的螢幕截圖:

在此處輸入圖像描述

字型是否“相同”取決於它們是如何創建(和維護)的。我在 TrueType 字型的螢幕截圖上看到 7 個缺失的字形,而在 PCF 字型上沒有。

引用自:https://unix.stackexchange.com/questions/261136