ふと、最近の Linux って EUC-JP ロケール使えるんだっけ? と思ったんで調べてみた。環境は Ubuntu 22.04。
EUC-JP ロケール
locales パッケージが入ってない場合はロケールはこれだけ:
% locale -a C C.utf8 POSIX
locales と language-pack-ja をインストール:
# apt install locales language-pack-ja
locale-gen
コマンドを実行すると ja_JP.utf8
が増える:
# locale-gen Generating locales (this might take a while)... ja_JP.UTF-8... done Generation complete. # locale -a C C.utf8 POSIX ja_JP.utf8
/etc/locale.gen
ファイルの ja_JP.EUC-JP
をコメントアウト:
... # it_IT@euro ISO-8859-15 # iu_CA UTF-8 ja_JP.EUC-JP EUC-JP # ja_JP.UTF-8 UTF-8 # ka_GE GEORGIAN-PS ...
locale-gen
コマンドを実行すると:
root@7a55c1aa3aba:/# locale-gen Generating locales (this might take a while)... ja_JP.EUC-JP... done ja_JP.UTF-8... done Generation complete.
EUC-JP ロケールが増えた:
# locale -a C C.utf8 POSIX ja_JP ja_JP.eucjp ja_JP.ujis ja_JP.utf8 japanese japanese.euc
これでロケールとしては使えるようになるんだけど、端末が UTF-8 のままだと当然文字化けする。
端末のロケールを設定するには xfce4-terminal だと「設定」→「上級者」→「エンコーディング」で。
または、ロケール指定で端末を起動する。最近の端末は1プロセスで複数のウィンドウを表示してるので、別のプロセスとして起動する必要あり。
% LC_ALL=ja_JP.eucjp xfce4-terminal --disable-server
ちゃんと文字化けせずに表示された。
あいうえお
が a4 a2 a4 a4 a4 a6 a4 a8 a4 aa
になってるので、ちゃんと EUC-JP になってることがわかる。
SJIS ロケール
locale-gen
コマンドは /etc/locale.gen
を使って localedef
コマンドを呼び出してるので、locale-gen
ではなく直接 localedef
コマンドを使ってもいい:
# localedef --inputfile ja_JP --charmap EUC-JP ja_JP.EUC-JP # locale -a C C.utf8 POSIX ja_JP.eucjp
locale-gen
のように、ja_JP.ujis
とか japanese
とかをエイリアスとして設定したい場合は、次のようにエイリアスファイルを指定する:
# localedef --inputfile ja_JP --charmap EUC-JP --alias-file /etc/locale.alias ja_JP.EUC-JP
--inputfile
は /usr/share/i18n/locales
内のファイル、--charmap
は /usr/share/i18n/charmaps
内のファイルを指定する。
/etc/locale.gen
には書かれてないけど、/usr/share/i18n/charmaps/SHIFT_JIS.gz
というファイルもあった。ん?実はシフトJISロケールも作れるのでは…。
試してみる:
# echo ja_JP.SJIS SHIFT_JIS >> /etc/locale.gen # locale-gen Generating locales (this might take a while)... ja_JP.SHIFT_JIS...[warning] character map `SHIFT_JIS' is not ASCII compatible, locale not ISO C compliant [--no-warnings=ascii] done Generation complete. # locale -a C C.utf8 POSIX ja_JP.sjis japanese.sjis
警告は出るけど作れたっぽい。
xfce4-terminal を EUC-JP のときと同じようにしてエンコーディングを「SHIFT_JIS」で起動。
ちゃんとシフトJISになった。
端末の中で vim を起動してもちゃんと日本語編集できた。
MySQL もちゃんと使えた。
Linux はシフトJIS使えたんだなー。今まで知らなかったわ…。