为什么某些 Linux 实用程序输出 Unicode(当不是预期的时候)?

为什么某些 Linux 实用程序输出 Unicode(当不是预期的时候)?

在构建一个读取命令输出的工具时,我意识到一些 Linux 实用程序会输出 Unicode 字符,而我并没有真正期望它们这样做。例如,在其错误输出中find使用(而不是 ASCII ')作为引号字符:

~ > find /root
/root
find: ‘/root’: Permission denied

这同样适用于g++

main.cpp: In function ‘int main()’:
main.cpp:2:9: error: ‘foo’ was not declared in this scope
  return foo;
         ^~~
main.cpp:2:9: note: suggested alternative: ‘bool’
  return foo;
         ^~~
         bool

这与我的系统区域设置有关吗?或者这是别的什么?输出localectl

   System Locale: LANG=en_ZA.UTF-8
                  LANGUAGE=en_ZA:en
       VC Keymap: n/a
      X11 Layout: us
       X11 Model: pc105

答案1

它与您的系统区域设置有关,因为它描述了实用程序应如何输出区域设置特定符号及其组合,例如‘’而不是"".

如果您不想这样做,请使用不同的区域设置,例如C尽可能标准和原始的区域设置:

$ LC_CTYPE=C find /root
/root
find: '/root': Permission denied

相关内容