現在のロケールがUTF-8エンコーディングを使用しているかどうかを確認する方法は?

現在のロケールがUTF-8エンコーディングを使用しているかどうかを確認する方法は?

ユーザーのロケールが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_言語情報

おすすめ記事