SSH中不会显示外来字符


17

我在使用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计算方面还很陌生,所以我几乎不知道我在这里做什么。


2
请在本地和远程发布localeand locale -a命令的输出,请
enzotib 2011年

感谢@enzotib-您的评论使我想到了所提供的语言环境可能在本地和远程都不相同的想法。
ChemicalRascal

Answers:


20

您的区域设置信息未在服务器计算机上正确设置。具体来说,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终端登录服务器,则将该行添加export LC_CTYPE=en_US.UTF-8~/.bashrc服务器上(或~/.zshrc您的Shell使用的任何文件)中。语言环境名称(例如en_US.UTF-8)必须是所提供的语言环境名称之一locale -a,并且必须具有.UTF-8.utf8或一些琐碎的变体)。


1
啊! 那就是问题所在:我在本地“使用” en_AU.utf8,好像已经转发到服务器了(或者至少是locale匹配的输出)。但是,locale -a远程仅提供了en_GB.utf8和en_US.utf8。谢谢!
ChemicalRascal

1
要获取当前语言环境的编码,您还可以使用:locale charmap

/etc/ssh/ssh_config还需要发送LANGSendEnv LANG LC_*
Shammel Lee

而且我需要添加export LC_CTYPE=en_US.UTF-8~/.profile服务器端。将其添加到~/.bashrc似乎没有效果。
datka
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.