ssh 和字符编码

Mac*_*cha 18 ssh character-encoding locale

当我ssh进入我的 VPS 时,我irssi在屏幕上运行。当有人发送 unicode 字符(例如 © 或 €)时,irssi当我在ssh会话中通过屏幕使用它时会显示垃圾。如果我irssi使用 irssi 的代理模块连接到它,从我本地计算机上运行的 irssi,它会正确显示。

同样,如果我在 VPS(屏幕外)上运行 ghci 并输入其中一个字符,它就会崩溃。

因此,显然,无论是在 ssh 还是系统设置中,我与 VPS 的连接都存在某种字符编码问题。

我怎样才能找出导致这种情况的原因并解决它?

细节:

客户系统

  • Arch Linux x64
  • UTF-8 编码

VPS系统

  • Ubuntu 服务器 10.04
  • 使用了未知编码。我怎么找到这个?(我只需要在我的 /etc/rc.conf 中查找 Arch)

Gil*_*il' 20

运行该locale命令将为您提供有关区域设置的信息;字符编码由LC_CTYPE设置给出。

在 Ubuntu 下,默认的语言环境设置在/etc/default/locale. 您可以通过LC_CTYPE在您~/.profile的 VPS 上设置来更改字符编码,例如

export LC_CTYPE=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

您必须确保en_US.UTF-8语言环境可用。Ubuntu 只为请求的语言环境生成语言环境数据。如果您安装了该软件包,则所有英语语言环境都应该可用language-pack-en-base。您可以手动请求他们的生成

sudo locale-gen en
Run Code Online (Sandbox Code Playgroud)

您还可以添加条目以/var/lib/locales/supported.d/local确保安装了特定的语言环境(例如,添加行en_US.UTF-8 UTF-8)。


Pab*_*aga 5

实际上 LC_CTYPE 中给出的值是一个语言环境名称。通常,但不是必需的,字符集编码在名称中。

但是如果你想知道,当然,字符集,那么命令是locale -k charmap.

~$ LC_CTYPE=C locale -k charmap
charmap="ANSI_X3.4-1968"
~$ LC_CTYPE=fr_BE locale -k charmap
charmap="ISO-8859-1"
Run Code Online (Sandbox Code Playgroud)

(注意字符集如何没有出现在上面的 LC_TYPE 值上)。