ふと、最近の 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使えたんだなー。今まで知らなかったわ…。