Magicode logo
Magicode
0
4 min read

LinuxでシフトJISが使えた

https://cdn.apollon.ai/media/notebox/a03b091b-84e6-4835-b53b-af4a545f203d.jpeg
ふと、最近の 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使えたんだなー。今まで知らなかったわ…。

Discussion

コメントにはログインが必要です。