使用命令切换终端的编码


24

我经常ssh使用西方编码而不是utf-8的服务器之一(而且我无法更改它)。

我已经开始编写bash脚本以连接到该服务器,因此不必每次都键入整个地址,但是我想改进此脚本,以便它也可以正确更改终端窗口的编码。

我需要做的更改可以通过使用鼠标通过导航到“终端”->“设置字符编码...”->“西方(ISO-8859-1)”来执行。对于当前的终端窗口/屏幕,是否存在执行相同操作的终端命令?

需要说明的是:
我对在远程站点上切换系统区域设置的方式感兴趣-该系统由其他人管理,我也不知道什么东西可能取决于那里的latin-1编码。我想要做的就是让这边的终端窗口将字符编码切换到上面提到的位置,就像我用鼠标和菜单所做的一样。


好问题!编码的问题往往是一个PITA ...这是一个方式,也不会工作... unix.stackexchange.com/questions/8859/...
lumbric

2
OFF我的答案怎么可能被接受,但是赏金又转到了另一个?:) :(
–törzsmókus2013年

1
@törzsmókus:您可以在此处阅读有关(新的?)赏金规则的信息:blog.stackoverflow.com/2010/06/improvements-to-bounty-system如果赏金所有者未在7天的赏金期限内授予赏金,则与以前一样,自动奖励规则同样适用:悬赏开始后发布的问题的任何答案(至少有2票赞成票)都可以自动接受并获得一半的悬赏金额。如果没有满足该条件的答案,则不会奖励任何赏金。再次,所有的赏金完全独立于接受答案。
符文2014年

Answers:


18

您正在寻找luit为此目的而设计的:

$ luit -encoding ISO-8859-1 ssh remote.host

它将ssh命令的输出转换为UTF-8,因此您无需更改终端的编码。


2
这是对的。但是,我在这里登陆luit的手册页,以寻找这一点:“路特通常由终端仿真器透明地调用。” 因此,对于那些因为您的终端输入的编码错误而到达这里的人,通常的解决方法是通过终端仿真器更改编码。
joseph_morris 2014年

@joseph_morris让我指出正在回答的问题的第三段。OP 确实知道如何使用终端仿真器的菜单命令(您称之为“正常”方式)来更改编码,但是他正在寻找CLI的替代方案。
törzsmókus

1
是的,这就是为什么我从“这是正确的”开始。但是,此页面现在是“终端编码”的热门文章之一,我认为一点点Luit文档对于到达此处试图回答“为什么我的终端编码搞砸了?”的其他人会有所帮助。-而且它的编码通常是在模拟器中更改的,而不是在CLI中更改的。
2014年

嗯,现在我明白你的意思了。
törzsmókus

4

首先在您喜欢的编辑器中编辑当前语言环境

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

希望能奏效


4

Gnome Terminal使用gconf来存储设置。这些可以用gconftoolSo 操作,您可以使用:

gconftool --set --type=string /apps/gnome-terminal/profiles/Default/encoding ISO-8859-1

我已经在12.04上对此进行了测试。由于某些原因,菜单("Terminal"->"Set Character Encoding...")似乎无法实时更新,但是实际的字符编码确实可以正确更新。


2
但这会更改所有终端的默认编码,而不仅仅是运行ssh连接脚本的默认编码。
törzsmókus

3

我不知道如何进行测试,但是使用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将有一个类似的终端程序,但是您必须使用正确的服务名,路径,方法和参数来使自己困惑。


2

这是连接到生产服务器时用于更改配置文件(用于背景色)的另一个解决方案。它涉及xdotool

xdotool将模拟选择所需菜单项所需的击键。首先用键盘尝试一下,然后写下顺序:

$ xdotool key alt+t Down c Down Return

它将激活第一个字符编码。Down在之前添加更多键Return以选择其他键。

注意:对于ssh,您还可以使用~/.ssh/config文件来配置服务器的别名。


抱歉-我想给您赏金代表,但单击了错误的帖子=(
Tomas Aschan 2012年

由于不能保证gnome-terminal的菜单不会发生变化,因此我认为这是一个非常脆弱的技术,如果没有实际的解决方案,这可能是正确的选择。但有一个
törzsmókus

1

开启xterm,使用控制序列更改编码。例如,bash您可以通过运行以下命令获取UTF-8字符集:

echo -n $'\e%G'

通过运行以下命令可以访问ISO 8859-1编码:

echo -n $'\e%@'
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.