ユーザーのロケールがUTF-8エンコーディングを使用していることを確認したいと思います。
これは少し醜いようです。
[[ $LANG =~ UTF-8$ ]] && echo "Uses UTF-8 encoding.."
より一般的で移植可能な方法はありますか?
ベストアンサー1
~からウィキペディア:
POSIXプラットフォームでは、ロケール識別子の定義は、ロケールバリアント修飾子の定義が異なり、文字エンコーディングが識別子に含まれることを除いて、言語タグのBCP 47定義と似ています。
定義形式は[言語[_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_言語情報。