![SSH 中不会显示外来字符](https://linux22.com/image/16727/SSH%20%E4%B8%AD%E4%B8%8D%E4%BC%9A%E6%98%BE%E7%A4%BA%E5%A4%96%E6%9D%A5%E5%AD%97%E7%AC%A6.png)
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 方面的计算相当陌生,所以我几乎不知道我在这里做什么。
答案1
你的语言环境服务器计算机上的信息未正确设置。具体来说,LC_CTYPE
指示终端上字符编码的变量设置不正确(或者,我怀疑根本没有)。
在本地终端中,运行locale
以查看您的区域设置。您可能会看到(除其他行外)类似的内容LC_CTYPE=en_US.UTF-8
;这里重要的是.UTF-8
部分,表明UTF-8编码。这是 Unix 世界(及其他世界)中多语言文本事实上的标准编码。
您需要将此信息传递给服务器。如果可行的话,最好的方法是通过 ssh 连接发送区域设置信息。为此,请在 的末尾添加以下行~/.ssh/config
:
Host *
SendEnv LC_* LANG
这要求AcceptEnv
服务器配置中存在合适的指令 ( /etc/ssh/sshd_config
)(Debian 上默认如此)。
如果这不起作用,并且您总是从 UTF-8 终端登录服务器,请将该行添加到服务器上的文件(或shell 使用的任何文件)export LC_CTYPE=en_US.UTF-8
中。区域设置名称(例如)必须是 提供的名称之一,并且必须具有(或一些细微的变化)。~/.bashrc
~/.zshrc
en_US.UTF-8
locale -a
.UTF-8
.utf8