如何通过 ssh 从 utf-8 客户端连接到 latin1 服务器?

如何通过 ssh 从 utf-8 客户端连接到 latin1 服务器?

我安装了全新的 Ubuntu,我想在 gnome 终端中通过 ssh 进行连接。服务器使用 latin1(所有文件等都是 latin1),所以我想在会话中使用它。我已更改菜单选项中的字符集,以便字符可以正确输出到我的屏幕上,但我无法正确输入非 ASCII。我应该将一些魔法参数传递给 ssh 还是 gnome 终端中有设置,或者我应该使用 stty?我有点迷茫了。

更新:

好的。我现在将问题缩小了一点。如果我在命令行上运行以下命令:

php -r 'while ($c = fread(STDIN, 1)) { echo $c; }'

按下非 ASCII 键时,它会正确回显。但是,如果我在 shell 中键入相同的键,则不会发生任何事情。所以这一定是 shell 环境中的某些设置(区域设置?)。有什么想法吗?

答案1

问题很可能与 bash 使用的 readline 有关。将以下内容输入到 或/etc/inputrc~/.inputrc

set meta-flag on
set output-meta on
set convert-meta off

meta-flag启用八位输入(即,它不会清除所读取字符中的第八位),无论终端声称它能够支持什么。 output-meta将启用直接显示第八位设置的字符,而不是显示为元前缀转义序列。当convert-meta启用时,readline 会将第八位设置的字符转换为 ASCII 键序列,方法是剥离第八位并在其前面加上转义字符(实际上,使用 escape 作为元前缀)。我们将其关闭。man readline有关这些和其他变量的更多信息,请参见。

答案2

您可以在 gnome-terminal 菜单上的 Terminal->Encoding 下更改编码。添加 Western (ISO 8859-1) 编码,然后切换到它。

相关内容