最近のLinuxはシフトJIS(SJIS)をサポートしてない場合があります.
その場合,moreやless,vimでシフトJISのファイルを開くと文字化けします.
Windowsで作成したソースコードやテキストファイルが文字化けする場合は文字コードだけでなく,LinuxがShiftJISをサポートしているかどうかもチェックするようにしましょう
Linuxがサポートしている文字コードを確認する
文字コードにはUTF-8やEUC,Shift JISなど様々な種類があります.システムが,これら文字コードに対応するには「ロケール」と呼ばれる情報を持っておく必要があります.
まずはシステムにインストールされているロケールの一覧を確認します
locale -a
実行するとインストール済みのロケールの一覧が表示されます
C POSIX
CとPOSIXしか表示されない場合は,シフトJISどころかUTFも使えません
日本語に関連するロケールは
ロケール名 | 別名 |
ja_JP.EUC-JP | EUC-JP |
ja_JP.UTF-8 | UTF-8 |
ja_JP.SJIS | SHIFT_JIS |
です
ロケールのインストール
ubuntuの場合は language-pack-ja というパッケージをインストールします
$ apt install locales language-pack-ja
インストール後に もう一度ロケール一覧を確認してみます
$ locale -a
C
C.utf8
POSIX
ja_JP.utf8
ja_JP.utf8 が増えましたが,まだ shift jis は含まれていません
ロケールデータベースの更新
ロケールデータはサイズが大きくなるので,デフォルトではシフトJISは無効になっています
設定ファイルを編集してシフトJISを有効にします
/etc/locale.gen をroot権限で編集します
$ sudo vi /etc/locale.gen
一行追加します
ja_JP.SJIS SHIFT_JIS
/etc/locale.genを更新したら,データベースを更新するコマンドを実行します
$ locale-gen Generating locales (this might take a while)... en_US.UTF-8... done ja_JP.SHIFT_JIS...failed to set locale! [warning] character map `SHIFT_JIS' is not ASCII compatible, locale not ISO C compliant [--no-warnings=ascii] done Generation complete.
警告が出ていますが,無視して大丈夫です.
localeを確認します
$ locale -a
ja_JP.sjis の表示が増えれば成功です
同様の手順で EUC も有効にできます
手順は
- /etc/locale.gen に
ja_JP.EUC-JP EUC-JP
を追加して,sudo locale-gen を実行するだけです