SSH 中不会显示外来字符

Che*_*cal 20 ssh character-encoding

我在使用ssh远程服务器(我没有管理员访问权限)时遇到了一些问题- 具体来说,那里有几个包含韩语和西里尔文文本的文件夹。

当我用 显示父文件夹内容时ls,字符被转义为“?”。也许值得注意的是,韩文字符似乎比应该存在的字符数多得多。

我知道我使用的终端程序可以显示字符,因为使用sftp可以完美显示它们。我尝试过的所有终端都会出现问题。

机器概要

本地机器:

  • Linux 2.6.32-5-686, i686
  • Debian GNU/Linux 6.0.2(挤压)
  • 拥有管理员权限

远程服务器:

  • Linux 2.6.32-bpo.5-amd64、x86_64
  • Debian GNU/Linux 5.0.8 (lenny)
  • 没有管理员访问权限,也没有物理权限

我可能错过了一些其他重要的统计数据或一些信息,在这种情况下,我深表歉意。我对计算的整个非 Windows 方面还很陌生,所以我几乎不知道我在这里做什么。

Gil*_*il' 22

您的区域设置信息未在服务器计算机上正确设置。具体来说,LC_CTYPE指示终端上字符编码的变量没有正确设置(或者,我怀疑根本没有)。

在您的本地终端中,运行locale以查看您的区域设置。你可能会看到(在其他行中)类似的东西LC_CTYPE=en_US.UTF-8;这里重要的是.UTF-8部分,表示UTF-8编码。这是 unix 世界(及其他)中多语言文本的事实上的标准编码。

您需要将此信息传递给服务器。如果可行,最好的方法是通过 ssh 连接发送区域设置信息。为此,在末尾添加以下几行~/.ssh/config

Host *
SendEnv LC_* LANG
Run Code Online (Sandbox Code Playgroud)

这要求AcceptEnv在服务器配置 ( /etc/ssh/sshd_config) 中存在合适的指令(在 Debian 上是默认设置)。

如果这不起作用,并且您总是从 UTF-8 终端登录到服务器,请将该行添加export LC_CTYPE=en_US.UTF-8到您~/.bashrc的服务器上(或~/.zshrc您的 shell 使用的任何文件)。区域设置名称(例如en_US.UTF-8)必须是由 提供的名称之一locale -a,并且必须具有.UTF-8.utf8或一些微不足道的变体)。