Bash

如何確定目前語言環境是否使用 UTF-8 編碼?

  • November 26, 2021

我想確定使用者的語言環境是否使用 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的包裝器。

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