Dabianの日本語環境をチューニングするに当って、自分好みに文字コード「UTF-8」を決めてきた。
1.SSHサーバとクライアントの設定で、SSHのクライアント端末として、「UTF-8 TeraTerm Pro with TTSSH2」を選択した。
2.Debianチューニング(1)の時に、エディターの選択で、「vim.tiny」を選択した。
3.Debianをインストールした時に、ロケールの選択で、「ja_JP.UTF-8」を選択した。
4.PHP5のインストールと設定の時に、PHP5の設定で、php.iniのmbstringの設定で、japanese と UTF-8 に設定した。
5.MySQL5のインストールと設定の時に、MySQL5の設定で、my.cnfにデフォルト文字コードとして「utf8」を指定した。

それでも文字化けが発生する

上記の設定をしていても、ユーザetchで、作成したテキストファイルを、rootユーザのホームディレクトリに移動させ、rootユーザでviエディターで見たときに、文字化けすることがある。初心者の私は、原因が分からず、いろいろ調べて分かったことを、次の項に記載する。
私と同じように、日本語の文字化けで困っている方は参考にしてほしい。

TOPへ

記述のページで、設定済みの項目もありますが、「日本語 UTF-8 環境整備」の切り口から、記載します。

UTF-8 TeraTerm Pro の設定

1. 設定⇒ 端末 を選択し、表示されるダイアログ「Ter Term: 端末の設定」で下記の通り設定する。


2. 設定⇒ 設定保存 を選択し、保存する。


エディターの選択と設定

エディターとして、vim(vi)を選択し、vimのデフォルトは、EUC をサポートしており、utf-8 をデフォルトにする場合、設定が必要になる。(今回の文字化けの主因は、ここにあった。)
Debianチューニング(1)の時に、選択したエディターは、vim.tiny で機能限定のコンパクトパッケージである。
1.正式版の vimパッケージがインストールされていないことを確認し、vimパッケージをインストールする。


2.インストールしたvim を、標準で使用するエディターにする。
コマンド # update-alternatives --config editor で標準エディターにインストールしたvim.basicを選択する。


3./etc/vim/vimrc の記述をよむ。


4.ロケールのvimの文字コードを utf-8に設定するために、/etc/vim/vimrc.localファイルを作成し、
set encoding=utf-8 と set fileencodings=utf-8,iso-2022-jp,ucs2le,ucs-2,cp932,euc-jp,latin1 を記述する。


この設定により、viコマンドで記述した時に、vim.basicのエディターで、文字コードutf-8で記述、表示できる。

TOPへ

Debianのロケールの設定(変更)

Debianをインストールする時に、ロケールを「ja_JP.UTF-8」を選択したので、新たな設定は必要ない。
1.ユーザ etchで、コマンド $ env で環境変数を表示させる。設定が、LANG=ja_JP.UTF-8 になっていることを確認する。


2.vim.basic(vi)記述と表示が、文字コードutf-8で記述されているか確認する。
環境変数が、LANG=ja_JP.UTF-8 に設定しているので、コマンドless、コマンドlv で正しく表示されている。コマンドlvに、オプション -Ou8 (utf-8で表示)を付けて表示させた。正常に表示されたので、utf-8で記述している証明になる。


補足: ロケールの再設定

ロケールを再設定したい場合は、
コマンド # dpkg-reconfigure locales を入力すると、Debianをインストールした時に表示された「Configuring Locals」のGUI画面が表示される。
    設定したいロケールを選択し、OKをEnterする。
    次の画面で、Default localeも選択したロケールでOKにする。
    この選択で、すべての一般ユーザのロケールが同じになる。

rootユーザでの文字化け

1.前項で、ユーザetchで作成したファイルtestを、/root/ディレクトリに、コピーしてくる。


2.コマンドlessで、ファイルtestを開く。「may be a binary file. See it anyway?」を聞かれるが、y を入力して、表示させる。日本語は変換されずに、シングルバイトで表示された。


3.マルチ文字コード対応のコマンドlvで、ファイルtestを開く。

    Aは、オプションを指定しないで lv でファイルを開く。
    Bは、オプションに文字コードEUC-JPを指定して開く。
    Cは、オプションに文字コードUTF-8を指定して開く。


この環境下では、オプションに文字コードUTF-8に指定して、コマンド:lv -Ou8 で初めて正常に表示された。この原因について調べた結果を、次の項で説明する。

TOPへ

1.コマンド su - で、rootユーザに代わり、コマンド # envで環境変数を表示させる。
su - は、su -l と同じ意味で、rootでログインした時の環境を継承する
LANG=C (英語)である。Debianのプログラムは、英語で記述されていることを示す。英語はシングルバイトなので、この環境では、マルチバイトの日本語は正しく表示されない。前項の「rootユーザの文字化け」は、この原因であることが分かった。


2.オプションをつけないで、コマンド su で、rootユーザに代わり、コマンド # envで環境変数を表示させる。この場合は、LANG=ja_JP.UTF-8 である。この場合のroot環境は、ユーザetchの環境を継承している。


3.ユーザetchの環境を継承したroot環境で、ファイルtestを表示させる。
@less、Alv、Clv -Ou8 は正常に表示された。文字コードをEUC-JPを指定したBlv -Oej は、文字化けした。
オプションなしの su で、rootに代われば、ロケールと同じ環境になることが分かる。


(参考)Fedora および CentOS5 では、ロケールを LANG=ja_JP.UTF-8 にすると、オプション付きの su - 、オプションなしの su で、rootに代わっても同じで、ユーザのロケール環境を継承し、rootでログインした場合 LANG=en_US.UTF-8 であった。

4.manページを表示させて、環境変数の違いを確認する。
@ su - で rootに代わった時、catのmanページは英語で表示された。
A su で rootに代わった時、catのmanページは日本語で表示された。


rootでログインした時の環境変数LANG=Cを変更しないで、一般ユーザからrootに代わるときは、オプションなしのsuで、rootに代わることとした。

TOPへ

文字化けの問題に悩まされないように、自宅サーバ構築に当って、すべて UTF-8 に指定してきた。設定箇所をまとめると下記の通りです。

Debian (OS) ロケール ja_JP.UTF-8 # dpkg-reconfigure locales
vim.basic (vi) /etc/vim/vimrc.local set encoding=utf-8
set fileencodings=utf-8,**省略***
TeraTermPro(SSH端末) 端末の設定画面 受信、送信、ロケール 他
PHP5 /etc/php/apache2/php.ini [mbstring]の設定
MySQL5 /etc/mysql/my.cnf default-character-set = utf8
init-connect="SET NAMES utf8"

コマンド su で、rootに代わる時、ロケーションの日本語環境 ja_JP.UTF-8 を継承するように、オプションなしの su を使用する。

TOPへ