如何在 Linux 虚拟终端中显示 Unicode?

如何在 Linux 虚拟终端中显示 Unicode?

读取 Unicode 中的任何数据都无法在 Linux 终端(即没有 X 窗口打开的虚拟终端)中正确显示。

我读在这里的讨论中安装以下程序吉富博,而且它确实有效,所以我想知道是否有任何方法可以配置(控制台字体?)终端以正确处理unicode而无需任何额外的软件。

在 Windows 终端(gnome-terminal、xterm 等)上它看起来像这样:

gnome 终端

在虚拟终端上它看起来像这样:

速度

在使用 JFBTERM 的虚拟终端上它看起来像这样:

论坛

以下是输出的屏幕截图locale

区域设置

以下是输出showconsolefont

显示控制台字体

是否有人知道是否可以仅使用默认虚拟终端来完成相同的操作?

答案1

您需要一种真正具有这些字符的字体。例如,Arch Linux 推荐使用Lat2-Terminus16

要尝试它,只需在虚拟控制台中发出以下命令:setfont Lat2-Terminus16

至于其余部分,大多数现代发行版已经支持它了。

答案2

控制台字体可以加载最多 512 种(我认为,或类似的)不同字形的字体;但通常只有 256 种字形。

显示拉丁语、西里尔语或其他使用少于 200 个非复杂符号的语言没有问题。

然而,对于复杂的脚本,或者需要大量不同符号的脚本(如日语),除了使用额外的布局来处理之外,没有其他选择。

请注意,如果 512 的限制对于 ASCII 和两种假名集来说已经足够,那么就存在宽度的问题。

CJK 和 Kana 适合一个正方形,它们的宽度是拉丁字母的两倍。这不是控制台可以立即处理的事情。

您可以采用古老而丑陋的“半宽片假名”(甚至可以找到这种旧字体),或者将控制台设置为 40 列宽,并使拉丁字母与假名一样宽。

我不知道有任何带有假名的控制台字体;你应该自己绘制(有工具可以这样做,你也可以复制位图日文字体的点)。

另外,您还可以使用iconv将假名音译为 ASCII。

答案3

除了 之外LANG/LC_ALLstty iutf8还必须告诉终端要做什么,setfont然后你可能需要加载有用的字体和映射。如果仍然有问题,请检查内核配置的CONFIG_NLS_xx设置,如果它没有自动加载,你可能需要这样做modprobe nls_utf8(不过我认为这只适用于 Unicode 文件名)。

一些 Linux 发行版提供了unicode_start脚本unicode_stop来自动执行此操作。

如果出现问题,则可能需要设置less环境变量(如果错误,则取消设置)。LESSCHARSET

马库斯·库恩的Unix/Linux 上的 UTF-8 和 Unicode 常见问题解答是无价的。

答案4

通过安装统一工具您可以找到unicodes。

$ 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:~$

相关内容