質問: 見識が浅く申し訳ないのですが、VM上でOracle Linux 7の環境を作成し、localeのLANG変更について調べています。 現在のlocaleは以下です。(変更等は行っていません) ``` # localectl status System Locale: LANG=ja_JP.UTF-8 VC Keymap: jp X11 Layout: jp,jp,jp X11 Variant: ,kana,Kana86 ``` しかし、これに対して使用可能なロケールを `localectl list-locales` や `locale -a` で確認しても同様の表記がありません。 ``` ja_JP ja_JP.eucjp ja_JP.ujis ja_JP.utf8 japanese japanese.euc ``` ネットサーフィンの結果ですのでリンクを提示できず申し訳ないのですが、UTF-8の設定を行う場合、「ja_JP.utf8」で記述されているものが多いように見受けられます。 これは現在の「ja_JP.UTF-8」と同一なのでしょうか? また、同一だとするとこの名称の紐づけ等はどこかで定義されているのでしょうか?
回答: `glibc` つまり Linux のランタイムライブラリの挙動として `LANG` 等の設定値は、そのコードページ部を * 英数字以外を除去 * (英字は)小文字化 した上で処理しているとのこと。実際 `glibc` ソースを見たところ `locale/loadarchive.c` と `intl/l10nflist.c` でそのような挙動をしています。また `intl/l10nflist.c` 中の `_nl_normalize_codeset()` のコメントには > > There is no standard for the codeset names. > > Normalization allows the user to use any of the common names. > > > コードセット名については標準が決まっていない。正規化することで、ユーザはよく知られた名前のどれでも使うことができる。 とあります。よって質問の答えは「同一視されている」「規格は無いが慣習として上記実装となっている」でしょう。