终端显示乱码,其设置与其他显示正确字符的终端相同

终端显示乱码,其设置与其他显示正确字符的终端相同

我在远程机器上使用 NerdTree 设置了 vim。我有两台本地机器。当我从一台本地计算机(例如 A)通过 ssh 到远程计算机时,它会正确显示 NerdTree 中的所有符号。但是,当我从另一台本地计算机(例如 B)通过 ssh 到远程计算机时,这些符号显示为一些乱码。我尝试对此进行一些搜索,并尝试了我能找到的各种语言环境和编码内容。以下是两台本地计算机和远程计算机的设置。

本地机器A:

$ stty
speed 38400 baud; line = 0;
eol = M-^?; eol2 = M-^?; swtch = M-^?;
ixany iutf8

$ echo $LANG
en_US.UTF-8

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

本地机器B:

$ stty
speed 38400 baud; line = 0;
eol = M-^?; eol2 = M-^?; swtch = M-^?;
ixany iutf8

$ echo $LANG
en_US.UTF-8

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

本地机器上的设置似乎是相同的。它们都运行 CentOS 风格的操作系统。两个终端都是 Gnome 终端,设置为使用字符编码 UTF-8。我能看到的唯一区别是机器 A 使用版本 2.16.0,字体为 Courier,机器 B 使用版本 2.31.3,字体为等宽字体。所以机器B实际上使用的是较新的版本。

远程机器:

λ echo $LANG
en_US.UTF-8

λ stty
speed 38400 baud; line = 0;
eol = M-^?; eol2 = M-^?;
-brkint ixany

λ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

λ我在远程计算机上的符号在$PS1两个终端上都正确显示。

我该如何继续?本地计算机上安装的字体重要吗?谢谢

答案1

我明白了这一点。这看起来像是字体问题。当我将字体从机器 A 安装到机器 B 后,它就开始正常工作。

为了安装字体,我将所有内容从/usr/share/fonts机器 A 复制到机器 B,然后fc-cache /usr/share/fonts按照描述运行这里

相关内容