UTF-8のロケールで使用する正しいエンコード名は何ですか?

UTF-8のロケールで使用する正しいエンコード名は何ですか?

私はCentOS 7システムで私の状況がどうなのか疑問に思います。

$ locale -a 
<snip>
en_US.utf8
<snip>

しかし:

$ localectl 
System Locale: LANG=en_US.UTF-8

それ以外の場合、X11(/usr/share/X11/locale/locale.dir)に基づくデフォルト名は次のとおりです。

$ grep 'en_US.UTF-8$' /usr/share/X11/locale/locale.dir 
en_US.UTF-8/XLC_LOCALE                  en_US.UTF-8
en_US.UTF-8/XLC_LOCALE:                 en_US.UTF-8

幸い、en_US.utf8には次のエイリアスがあります。

$ grep 'en_US.utf8' /usr/share/X11/locale/locale.alias
en_US.utf8                                      en_US.UTF-8
en_US.utf8:                                     en_US.UTF-8

ru_UA.utf8のような他のものはそれほど幸運ではありません。

$ locale -a | grep ru_UA.utf8
ru_UA.utf8
$ grep 'ru_UA.utf8' /usr/share/X11/locale/locale.alias
$ grep 'ru_UA.UTF-8' /usr/share/X11/locale/locale.dir
en_US.UTF-8/XLC_LOCALE                  ru_UA.UTF-8
en_US.UTF-8/XLC_LOCALE:                 ru_UA.UTF-8

選択したロケールがX11 locale.aliasにない場合、GDM(またはgnome-session?)は "utf8"バージョンを強制的に適用して次のメッセージでXプログラムを中断するため、これは少し面倒です。 「Xlibでサポート、ロケールがCに設定されている」が存在します。 i.できる/usr/share/X11/locale/locale.aliasを編集するだけです。しかし、どのバージョンが実際に正しいかについての詳細情報があれば良いでしょう。

答え1

GNU libcソースコードのコメント状態(intl / l10nflist.c:_nl_normalize_codeset):

コードセット名の標準はありません。

この機能は、コードセット名をすべて小文字に正規化し、英数字以外のすべての文字を削除します。つまり、「UTF-8」は「utf8」になります。

ロケールアーカイブ内のロケール名は、完全修飾コードセット名を使用します。

標準がないため、GDMには「utf8」を使用するためのすべての権限がありますが、「ru_UA.utf8」などのロケールは使用できません。無効。 「utf8」は好まないかもしれませんが、標準化された形式なので、確かに許可されています(少なくともlibc標準によると)。

関連情報