1.はじめに
Redhat8では言語ロケールをUTF-8しかサポートしていない関係もあり、SJISでロケールを設定してもロケールが反映されず、文字化けを起こしてしまいます。
しかし、SJISを設定する方法もあるので今回はその手順をまとめていきます。
2.概要
RedHat8で言語ロケールを【ja_JP.SJIS】に設定する。
なお、一部異なるがRedHat7でも同様の手順でロケール変更が可能です。
3.サポート
RedHat公式の言語サポート状況を以下に記載します。
バージョン | サポート対象ロケール | サポート状況 |
---|---|---|
RedHat5 | UTF-8 | サポート中 |
RedHat6 | UTF-8 | サポート中 |
RedHat7 | UTF-8 | サポート中 |
RedHat8 | UTF-8 | サポート中 |
RHEL4以前では言語ロケールのサポートが終了しています。
RHEL8からそもそもSJISがデフォルトで入らなくなりました。
4.ロケール変更手順
ではRedHat8で言語ロケールをSJISに変更する手順をまとめていこうと思います。
手順1:ロケールパッケージのインストール
ロケールパッケージをインストールします。
※RHEL7以前ではこの手順は必要ありません。
[user@ip-x-x-x-x ~]# sudo su -
[root@ip-x-x-x-x ~]# yum install glibc-locale-source
手順2:文字マップの作成
文字マップを作成します。
ASCIIに準拠していないため、警告メッセージが出力されますがマップ自体は作成されているため無視していただいて問題ありません。
[root@ip-x-x-x-x ~]# localedef -f SHIFT_JIS -i ja_JP ja_JP.SJIS
character map `SHIFT_JIS'' is not ASCII compatible, locale not ISO compliant
手順3:ロケールをセット
SJISロケールをセットします。
[root@ip-x-x-x-x ~]# LANG=ja_JP.SJIS
手順4:プロファイルへの記述
プロファイルにロケール設定を記述して恒久的なロケール変更を実現します。
今回はOS全体のロケールを変更するので、rootユーザーの~/.bashrcへ記述したいと思います。
[root@ip-x-x-x-x ~]# vi ~/.bashrc
# 以下のコードを最下行以下に記述
export LANG=ja_JP.SJIS
[root@ip-x-x-x-x ~]# source ~/.bashrc
手順5:確認
ロケールが設定通り変更されているか以下コマンドを使用して確認しましょう。
[root@ip-x-x-x-x ~]# echo $LANG
ja_JP.SJIS
[root@ip-x-x-x-x ~]# locale
LANG=ja_JP.SJIS
LC_CTYPE="ja_JP.SJIS"
LC_NUMERIC="ja_JP.SJIS"
LC_TIME="ja_JP.SJIS"
LC_COLLATE="ja_JP.SJIS"
LC_MONETARY="ja_JP.SJIS"
LC_MESSAGES="ja_JP.SJIS"
LC_PAPER="ja_JP.SJIS"
LC_NAME="ja_JP.SJIS"
LC_ADDRESS="ja_JP.SJIS"
LC_TELEPHONE="ja_JP.SJIS"
LC_MEASUREMENT="ja_JP.SJIS"
LC_IDENTIFICATION="ja_JP.SJIS"
以上でロケールをSJISに設定することができました。
プロファイルにもロケール設定を記述しているため、OSへ再接続してもロケール設定が保持されます。
5.ロケールが反映される範囲
上記手順のロケールセットを行うユーザーによって、ロケールの範囲が異なります。
root ⇒ OS全体
user ⇒ そのユーザーのみ
特定のユーザー使用時のみ設定を反映させたい場合はそのユーザーにスイッチして以下手順を行います。
<例> ユーザー(auto)でのロケールを設定したい場合
■ロケール変更手順
[root@ip-x-x-x-x ~]# su auto
[auto@ip-x-x-x-x ~]# sudo localedef -f SHIFT_JIS -i ja_JP ja_JP.SJIS
[auto@ip-x-x-x-x ~]# LANG=ja_JP.SJIS
[auto@ip-x-x-x-x ~]# vi ~/.bashrc
# 以下のコードを最下行以下に記述
export LANG=ja_JP.SJIS
■確認手順
# ユーザー(auto)でロケール設定を確認
[auto@ip-x-x-x-x ~]# echo $LANG
ja_JP.SJIS
[auto@ip-x-x-x-x ~]# locale
LANG=ja_JP.SJIS
~~~
LC_IDENTIFICATION="ja_JP.SJIS"
# rootにスイッチしてrootのロケール設定を確認
[auto@ip-x-x-x-x ~] sudo su -
[root@ip-x-x-x-x ~]# echo $LANG
en_US.utf-8
[root@ip-x-x-x-x ~]# locale
LANG=en_US.utf-8
~~~
LC_IDENTIFICATION="en_US.utf-8"
特定のユーザーでのみロケールを変更したいなんて稀なことだと思いますが、一応頭の片隅に入れておきましょう。
6.まとめ
今回はRedHatでSJISを設定する方法をまとめました。
他のOS(Debian等..)でのロケール変更手順もいつかまとめていこうと思います。
では以上になります、ありがとうございました。