如何让 zsh 正确显示国际字符?

Mor*_*gan 12 bash zsh international utf-8 macos

我刚开始使用 zsh,并且喜欢它。但是,当涉及到国际角色时,我偶然发现了一个烦恼:

?  ~  touch åäö.txt               
?  ~  ls                          
Desktop       Dropbox       Music         Sites
Documents     Library       Pictures      a??a??o??.txt
Downloads     Movies        Public
?  ~  rm -v a<030a>a<0308>o<0308>.txt
åäö.txt
?  ~  
Run Code Online (Sandbox Code Playgroud)

使用 bash,它看起来像这样(在两种情况下,文件名rm -v都是通过按自动完成的TAB)。

johan@retina ~ $ touch åäö.txt
johan@retina ~ $ ls
Desktop       Dropbox       Music         Sites
Documents     Library       Pictures      åäö.txt
Downloads     Movies        Public
johan@retina ~ $ rm -v åäö.txt 
åäö.txt
johan@retina ~ $ 
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题zsh

编辑:

设置export LANG=en_US:UTF-8修复了 eg 的输出,ls并在TAB完成时有多个匹配项时在当前输入下方的行上正确显示它。但是,从TAB-completion 中选择文件它在输入行上显示了错误的方式,当只有一个匹配项时也是如此。

上面的例子现在看起来像这样zsh

?  ~  touch åäö.txt               
?  ~  ls                          
åäö.txy
?  ~  rm -v a<030a>a<0308>o<0308>.txt
åäö.txt
?  ~  
Run Code Online (Sandbox Code Playgroud)

如果我有两个匹配TAB-completion 的文件,它看起来像这样:

?  ~  touch åäö.txt               
?  ~  touch öäå.txt                          
?  ~  rm 
öäå.txt    åäö.txt
Run Code Online (Sandbox Code Playgroud)

通过TAB再次按并使用箭头键选择上述之一,或按 a 或 o 以在完成前仅进行一个匹配会生成以下内容:

?  ~  rm o<0308>a<0308>a<030a>.txt
?  ~  rm a<030a>a<0308>o<0308>.txt
Run Code Online (Sandbox Code Playgroud)

关于出了什么问题的任何建议?

use*_*755 6

感谢@mpy 解决了 LANG 问题。答案是使用:

export LANG=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

在您的.zshrc.

剩下的问题是由完成系统引起的。不幸的是,完成是一个怪物功能。它涉及 shell 函数,甚至可能是脚本被调用,并且在该过程中的某个地方可能 LANG 再次设置为错误的值。如果你有 root 权限,你可以调试这个 shell 脚本代码)。祝完成指南好运 。