
讀取 Unicode 中的任何資料都無法在 Linux 終端機(表示在沒有 X windows 的情況下開啟的虛擬終端)中正確顯示。
我讀在這裡的討論中安裝程序,例如JFB術語,而且它確實有效,所以我想知道是否沒有任何方法可以配置(控制台字體?)終端以正確處理 unicode,而無需任何額外的軟體。
在 Windows 終端機(gnome-terminal、xterm 等)上,它看起來像這樣:
在虛擬終端上它看起來像這樣:
在具有 JFBTERM 的虛擬終端上,它看起來像這樣:
這是輸出的螢幕截圖locale
:
這是輸出showconsolefont
:
有誰知道是否可以使用預設的虛擬終端來完成相同的任務?
答案1
您需要一種實際包含這些字元的字體。例如,Arch Linux 推薦Lat2-Terminus16
。
要嘗試它,只需在虛擬控制台中發出以下命令:setfont Lat2-Terminus16
。
至於其餘的,大多數現代發行版已經開箱即用地支援它。
答案2
控制台字體可以載入多達 512 種(我認為,或類似的)不同的字形;然而通常只有 256 個字形。
顯示拉丁語、西里爾語或其他使用少於 200 個非複雜符號的語言是沒有問題的。
但是,對於複雜的腳本或需要大量不同符號(例如日語)的腳本,您除了使用額外的佈局來處理它之外別無選擇。
請注意,如果 512 的限制足以滿足 ASCII 和兩個假名集的要求,則存在寬度問題。
CJK 和假名適合一個正方形,它們的寬度是拉丁字母的兩倍。這不是控制台可以立即處理的事情。
你可以求助於又舊又醜的“半角片假名”(甚至可能找到這種東西的舊字體),或者將你的控制台設置為 40 列寬度,並讓拉丁字母與假名一樣寬。
我不知道有任何這樣的帶有假名的控制台字體;你應該自己繪製(有工具可以這樣做,你可以複製點陣圖日語字體的點。
此外,您也可以iconv
將假名音譯為 ASCII。
答案3
除了LANG/LC_ALL
,stty iutf8
需要告訴終端要做什麼之外,您可能還需要setfont
加載有用的字體和映射。如果您仍然遇到問題,請檢查內核配置的CONFIG_NLS_xx
設置,如果它沒有自動加載,您可能需要這樣做modprobe nls_utf8
(不過我認為這僅適用於 Unicode 檔案名稱)。
一些 Linux 發行版提供了unicode_start
腳本unicode_stop
來自動執行此操作。
如果less
導致問題,可能需要LESSCHARSET
設定環境變數(如果錯誤則取消設定)。
馬庫斯·庫恩Unix/Linux 的 UTF-8 和 Unicode 常見問題解答是無價的。
答案4
透過安裝統一工具你可以找到unicode。
$ sudo apt-get install uniutils
然後使用uniname
:
ubuntu@shin-instance:~$ echo 岡田shin | uniname
No LINES variable in environment so unable to determine lines per page.
Using default of 24.
character byte UTF-32 encoded as glyph name
0 0 005CA1 E5 B2 A1 岡 CJK character Nelson 621
1 3 007530 E7 94 B0 田 CJK character Nelson 2994
2 6 000073 73 s LATIN SMALL LETTER S
3 7 000068 68 h LATIN SMALL LETTER H
4 8 000069 69 i LATIN SMALL LETTER I
5 9 00006E 6E n LATIN SMALL LETTER N
6 10 00000A 0A LINE FEED (LF)
ubuntu@shin-instance:~$