小编Cra*_*nia的帖子

$LANG 对终端的影响

我正在尝试了解$LANG变量与 gnome-terminal(及其字符编码首选项)的行为方式。我一直在使用 iso8859-1 (latin1) 作为我的主要字符集,并且我所有的文件名都是这样编码的。

对于以下测试,我将创建一个ls -l文件名中带有西班牙重音字符的目录:

情况1:

  • 为 ISO-8859-1 配置的 gnome-terminal
  • LANG 设置为“en_US-iso8859-1”
  • 结果:我正确地看到所有文件

案例#2:

  • 为 UTF-8 配置的 gnome-terminal
  • LANG 设置为“en_US-iso8859-1”
  • 结果:我看到所有西班牙语字符都是垃圾字符。这是预期的,因为我更改了终端的字符编码

案例#3:

  • 为 ISO-8859-1 配置的 gnome-terminal
  • LANG 设置为“en_US-UTF-8”
  • 结果:我看到所有西班牙语字符都是垃圾字符。

为什么在最后一种情况下我看到乱码?ls的输出不应该按原样将文件名直接发送到 gnome-terminal 吗?由于 gnome-terminal 是为 ISO-8859-1 配置的,我原以为它们看起来是正确的。

有一段时间我想,也许 bash 正在考虑我的$LANG变量并执行一些转换。然后我将终端切换到 UTF-8,但我仍然看不到正确的字符。我什至将 ls 的输出通过管道传输到 xxd ,令我惊讶的是,我仍然看到编码的文件:ISO-8859-1。

总结:如果我的列表包含 ISO-8859-1 字符,并且我的终端模拟器配置为相同的字符编码:当LANG设置为其他时,谁在进行转换?

感谢您的任何帮助,您可以提供。

克拉科尼亚

terminal-emulator terminal character-encoding locale gnome-terminal

11
推荐指数
2
解决办法
2万
查看次数