![ssh 和字符编码](https://linux22.com/image/41956/ssh%20%E5%92%8C%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81.png)
当我ssh
进入我的 VPS 时,我irssi
在屏幕上运行。当有人发送 unicode 字符(例如 © 或 €)时,irssi
当我在会话中通过屏幕使用它时,会显示垃圾ssh
。如果我irssi
使用 irssi 的代理模块从本地计算机上运行的 irssi 连接到该模块,它会正确显示。
同样,如果我在 VPS(屏幕外)上运行 ghci 并输入这些字符之一,它就会崩溃。
因此,显然,我与 VPS 的连接存在某种字符编码问题,无论是在 ssh 还是系统设置中。
我怎样才能找出造成这种情况的原因并解决它?
细节:
客户端系统
- Arch Linux x64
- UTF-8编码
VPS系统
- Ubuntu服务器10.04
- 使用未知编码。我如何找到这个? (我只需要在 /etc/rc.conf 中查找 Arch)
答案1
运行该locale
命令将为您提供有关区域设置的信息;字符编码由设置给出LC_CTYPE
。
在 Ubuntu 下,默认区域设置在 中给出/etc/default/locale
。您可以通过LC_CTYPE
在~/.profile
VPS 上设置来更改字符编码,例如
export LC_CTYPE=en_US.UTF-8
您必须确保该en_US.UTF-8
区域设置可用。 Ubuntu 只为请求的语言环境生成语言环境数据。如果安装了该软件包,所有英语区域设置都应该可用language-pack-en-base
。您可以手动请求他们的生成
sudo locale-gen en
您还可以添加条目以/var/lib/locales/supported.d/local
确保安装了特定的区域设置(例如,添加行en_US.UTF-8 UTF-8
)。
答案2
实际上 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"
(请注意字符集如何不出现在上面的 LC_TYPE 值中)。