问题描述
我经常使用ssh
的其中一台服务器使用西方编码而不是utf-8(而且我无法更改它)。
我已经开始编写bash脚本以连接到该服务器,因此不必每次都键入整个地址,但是我想改进此脚本,以便它也可以正确更改终端窗口的编码。
我需要做的更改可以通过使用鼠标导航到”Terminal”->”Set字符编码… “->”Western(ISO-8859-1)“来执行。对于当前的终端窗口/屏幕,是否存在执行相同操作的终端命令?
需要说明的是:我对在远程站点上切换系统区域设置的方式不感兴趣-该系统由其他人管理,我也不知道什么东西可能取决于那里的latin-1编码。我想要做的就是让我这边的终端窗口将字符编码切换到上面提到的位置,就像我用鼠标和菜单所做的一样。
最佳办法
您正在寻找为此目的而设计的luit
:
$ luit -encoding ISO-8859-1 ssh remote.host
它将ssh命令的输出转换为UTF-8,因此您无需更改终端的编码。
次佳办法
首先在您喜欢的编辑器中编辑当前语言环境
sudo gedit /var/lib/locales/supported.d/local
类似于
en_GB.UTF-8 UTF-8
en_US.UTF-8 UTF-8
en_GB.ISO-8859-1 ISO-8859-1
en_US.ISO-8859-1 ISO-8859-1
然后运行sudo dpkg-reconfigure locales
然后将终端设置为LANG=en_GB.ISO-8859-1
希望能奏效
第三种办法
Gnome Terminal使用gconf来存储设置。这些可以使用gconftool
进行操作,因此,您可以使用:
gconftool --set --type=string /apps/gnome-terminal/profiles/Default/encoding ISO-8859-1
我已经在12.04上对此进行了测试。由于某些原因,菜单("Terminal"->"Set Character Encoding..."
)似乎没有实时更新,但是实际的字符编码确实可以正确更新。
第四种办法
我不知道如何进行测试,但是使用Kubuntu上的Konsole可以执行以下操作:
1)查找注册到dbus的应用程序
$ qdbus
我使用konsole
,所以简单的qdbus | grep kons
就给我org.kde.konsole
2)在Konsole中查找当前会话
$ qdbus org.kde.konsole | grep Sessions
/Sessions
/Sessions/1
$ set | grep -i sessions
KONSOLE_DBUS_SESSION=/Sessions/1
3)找到有用的方法
$ qdbus org.kde.konsole /Sessions/1 | grep -i codec
method QByteArray org.kde.konsole.Session.codec()
method bool org.kde.konsole.Session.setCodec(QByteArray codec)
4)检查当前编码
$ qdbus org.kde.konsole /Sessions/1 org.kde.konsole.Session.codec
UTF-8
5)设置编码
$ qdbus org.kde.konsole /Sessions/1 org.kde.konsole.Session.setCodec ISO-8859-1
true
6)检查当前编码
$ qdbus org.kde.konsole /Sessions/1 org.kde.konsole.Session.codec
ISO-8859-1
Ubuntu将有一个类似的终端程序,但是您必须使用正确的服务名,路径,方法和参数来使自己困惑。
第五种办法
在xterm
上,使用control sequences更改编码。例如,在bash
中,您可以通过运行以下命令获取UTF-8字符集:
echo -n $'\e%G'
通过运行以下命令可以访问ISO 8859-1编码:
echo -n $'\e%@'