![在所有终端中禁用 utf-8?](https://linux22.com/image/150074/%E5%9C%A8%E6%89%80%E6%9C%89%E7%BB%88%E7%AB%AF%E4%B8%AD%E7%A6%81%E7%94%A8%20utf-8%EF%BC%9F.png)
这个问题与我的Ubuntu 18系统有关,如下...
% uname -a
Linux myhost.name.net 4.15.0-45-generic #48-Ubuntu SMP Tue Jan 29 16:28:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
我不知道在我的定期系统升级过程中以下情况已经持续了多久,但我现在注意到我所有的终端窗口都在写UTF-8
字符。我希望使用us.ascii
(或可能iso-8859-1
)所有终端窗口。我找不到任何地方设置这个。
此外,所有键盘输入似乎都是作为UTF-8
,我也希望它是us.ascii
or iso-8859-1
。
默认情况下,该LANG
变量在我的终端窗口中运行的所有 shell 中设置为en_US.UTF-8
,但我并没有在任何配置文件中故意设置它。
据我所知,这发生在xterm
、rxvt
和下urxvt
,并且这些程序都没有配置为利用。UTF-8
我正在跑步XFCE4
,如果这有什么区别的话。我在XFCE4
设置中也找不到这方面的任何设置。
任何人都可以建议一种方法来重置我的系统,以便所有终端窗口始终显示us.ascii
or iso-8859-1
,并且所有键盘输入也是us.ascii
or iso-8859-1
?
非常感谢。
答案1
您找不到任何特定设置,因为绝大多数现代 Linux 软件决定了语言环境环境变量使用的字符集。使用该locale
命令查看完整的当前区域设置。
你检查了吗/etc/default/locale
?它是用于设置系统默认区域设置的标准 Debian 配置文件。如果您想使用 iso-8859-1 而不是 UTF-8,您应该:
- 确保该
en_US ISO-8859-1
行未注释掉,/etc/locale.gen
并在编辑文件后运行sudo locale-gen
(如果不是) LANG
将语言环境变量(或至少LC_CTYPE
)指定为en_US.iso88591
(或根据 的任何正确形式locale -a | grep en_US
)
如果问题是您从 Ubuntu 18 UTF-8 系统连接到使用 ISO-8859-1 而不是 UTF-8 的旧系统,您可以考虑在传出连接上插入字符映射层,而不是降级整个系统系统来处理遗留编码。制作一个小脚本(或 shell 函数),如下所示:
#!/bin/sh
luit -encoding 'ISO 8859-1' ssh "$@"
(如果您想对远程端点强制执行严格的 US-ASCII,请替换ISO 8859-1
为ASCII
。)
随意命名。ssh
使用旧字符编码连接到系统时,请使用此脚本/函数而不是常规命令。