Bash
如何確定目前語言環境是否使用 UTF-8 編碼?
我想確定使用者的語言環境是否使用 UTF-8 編碼。
這似乎有點難看:
[[ $LANG =~ UTF-8$ ]] && echo "Uses UTF-8 encoding.."
有沒有更通用/便攜的方式?
來自維基百科:
在 POSIX 平台上,區域設置標識符的定義類似於 BCP 47 語言標記的定義,但區域設置變體修飾符的定義不同,字元編碼作為標識符的一部分包含在內。
它以這種格式定義:
$$ language[_territory $$$$ .codeset $$$$ @modifier $$]。(例如,使用 UTF-8 編碼的澳大利亞英語是 en_AU.UTF-8。)
但是,如果語言環境標識符中缺少程式碼集後綴,例如
en_AG
(參見此問題),則程式碼集由該語言環境的預設設置定義,很可能是 UTF-8。因此,無法通過查看 LANG 環境變數來確定目前編碼。此外,該
locale
命令僅顯示環境變數的目前值。因此,該命令似乎也不能用於確定程式碼集。但是,有一個 Perl 模組
I18N::Langinfo
,另請參閱這個問題,這似乎是一個解決方案:perl -MI18N::Langinfo=langinfo,CODESET -E 'say "Uses UTF-8 encoding .." if langinfo(CODESET()) eq "UTF-8"'
這個 Perl 模組是 C 庫函式nl_langinfo的包裝器。