我有一台在 zfs 文件系统上带有 samba 共享的服务器。文件名是匈牙利语。当我使用 ssh 登录时,文件名在终端中显示不正确:
如果我对文件名进行自动完成,那么很明显文件名本身是好的,包含非 ASCII 字符:
我已经尝试将终端类型字符串设置为“putty”,将终端字符集更改为UTF-8或ISO-8859-2,但都无济于事。
同样的问题出现在午夜指挥官中,甚至“线条”都不正确:
我将 Putty 配置中的显示字符更改为 ISO8859-2:
那么至少行字符是正确的,但是文件名仍然不好:
如果我启动“mc -ac”,那么我会看到破折号而不是线条,但文件名仍然是错误的:
所以肯定是语言环境的问题。如果我这样做:
设置环境 LANG hu_HU.ISO8859-2
那么它仍然是错误的:
我将 putty 配置设置为 UTF-8,并将 LANG 设置为 hu_HU.UTF-8,那么有些字符是好的,但不是全部:
我迷路了。我尝试了许多其他组合,但似乎都不能正常工作。有人知道如何设置它,以便在 shell 和 mc 中正确显示文件名和图形字符吗?
顺便说一下,正确的文件名前缀应该是:“Díjbekérő”
答案1
这是正确的解决方案。
将 LANG 环境变量设置为 hu_HU.UTF-8
響鳴:
setenv LANG hu_HU.UTF-8
重击/sh:
LANG=hu_HU.UTF-8
export LANG
还将putty中的“终端编码”设置为UTF-8:
那么它是完美的,无论是在 shell 中还是在 mc 中:
这也解决了我使用 xterm/gnome-terminal 从 Linux 机器登录时出现的问题。
似乎通用的“系统范围”解决方案是在 /etc/login.conf 中创建一个新类,其中包含以下内容:
hungarian|Hungarian:\
:charset=hu_HU.UTF-8:\
:lang=hu_HU.UTF-8:\
:tc=default:
然后运行 cap_mkdb /etc/login.conf,最后使用 chsh 更改特定用户的登录类别。(对于新用户,最好在“adduser”要求时指定登录类别。)
除终端编码外,所有内容都记录在这里:
https://www.freebsd.org/doc/handbook/using-localization.html
也许我在发送问题之前就已经弄清楚了。但我还是提供了答案,以防有人遇到同样的问题。
更新:执行此操作后,您将无法使用默认设置的 WinSCP。WinSCP 将尝试在服务器上执行“ls -la”并解析结果。对于非英语语言环境,结果将包含不同语言的日期,而 WinSCP 无法解释该日期。要解决此问题,请转到配置并将列表命令从“ls -la”更改为“env LANG=en_US.UTF-8 ls -la”。(它位于编辑连接/高级/环境/SCP/Shell/目录列表下)
通过使用此设置,您将能够使用 WinSCP 并同时保留用户的默认区域设置。