Locale

為什麼某些 Linux 實用程序會輸出 Unicode(當它不是預期的時候)?

  • November 24, 2020

在建構一個讀取命令輸出的工具時,我意識到一些 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

它與您的系統語言環境有關,因為它描述了實用程序應如何輸出特定於語言環境的符號及其組合,例如,‘’而不是"".

如果您不希望這樣,請使用不同的語言環境,例如C盡可能標準和原始的語言環境:

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

引用自:https://unix.stackexchange.com/questions/620944