日本語が文字化けする!

前回は、GitHubからWindows向けOpenSSHのバイナリをダウンロードし、インストールする方法を紹介した。

早速使い始めたいところだが、WindowsクライアントからCentOSなどのLinuxサーバにログインする場合には1点、クリアしなければいけない問題がある。端的に言えば、CentOS側で出力される日本語が文字化けするのだ。

デフォルトの設定だと、CentOS側で出力される日本語が文字化けする

昔からUNIX系のOSを使ってきたおじさま方の中には、「日本語は何かと問題が出るから、英語しか使わないようにしている」という猛者もいる。さもありなんなわけだが、やっぱり日本語を使いたい。

そこで今回は、文字化けしてしまう理由と、それを解決するための設定方法を紹介しよう。

コード・ページとフォントの問題

文字化けが起こる原因は、2つある。まず1つ目は、コード・ページの不一致だ。Windowsではコード・ページと呼ぶが、Linux/*BSDでは「文字コード」とか「環境変数LANG」といった言葉で表現されることが多い。まあ、どれも同じようなものだと思ってもらえればと思う。

そして、このコード・ページとは何者なのかだが、長くなるので概要だけざっくり説明する。文字を書くとき、紙のノートならば筆記用具で直接日本語を書けばよいが、PCではそうはいかない。日本語1文字ずつをそれぞれPCで表現できる「何か」に変換して記録するわけだが、その「何か」には流儀がある。これが「コード・ページ」とか「文字コード」とか呼ばれているものであり、いくつも種類がある。これだけ知っておいてもらえればよいだろう。

コード・ページとして、Windowsでは「CP932」が使われ、UNIX系OSでは「EUC」が使われてきた。最近のLinuxでは、EUCではなく「UTF-8」の使用が一般的だ。要するに、Windowsとそれ以外のOSとではコード・ページが異なっており、これが文字化けを引き起こしているのである。

いろいろ考えると、最終的にはUTF-8に収束するのが無難だと筆者は考える(Windowsは互換性を最も重視するので、どこまでもCP932のまま突き進むような気もするが)。今回は、Windows側のコード・ページをUTF-8に変更することで、文字化けを解消したい。

そして、もう1つの問題はフォントだ。コード・ページが一致しても、それを表現できるフォントが設定されていないと、やはり文字化けが起こる。コード・ページとフォント、この2つを正しく設定することで、日本語ライフをエンジョイできるようになるのだ。

フォントをMSゴシックへ変更

まずは、利用するフォントをUTF-8が表現できるものへ変更する。PowerShellのメニューから「プロパティ」を選択して、設定ダイアログを起動してほしい。ここで「フォント」タブを選択すると、現状のフォント設定を確認できる。おそらく初期状態では「ラスターフォント」に設定されているだろう。これを、「MSゴシック」に変更する。

「フォント」タブを選択し、フォントを「MS ゴシック」に変更

これでフォントの設定に関してはOKだ。

コード・ページをUTF-8へ変更

次に、コード・ページを見てみよう。設定されているコード・ページは、「chcp」というコマンドで確認/変更することができる。chcpは「CHange Code Page」の略だ。まずは、パラメータなしで実行して現在のコード・ページを確認してみてほしい。

現在のコード・ページは「932」となっている

コード・ページは2桁から5桁の数字で管理されており、「932」はシフトJISを表す。これをUTF-8を表す「65001」に変更するには、chcpコマンドのパラメータに「65001」を指定すればよい。これで、Windows側で想定するコード・ページと、CentOSが使っている文字コードが一致する。

chcpコマンドを使ってコードページをUTF-8に変更!

この状態でCentOSにログインして確認すると、日本語もばっちり出力されていることがわかる。

日本語が文字化けせずに出力されるようになった

自動的にコード・ページを変更する

ここまでで、日本語の文字化け問題はひとまず解決できた。しかし、このままではログインするたびにchcpコマンドを実行しなければならず、面倒だ。ログイン時に自動的に設定されるようにしておきたい。

前回、PowerShellは起動時に特定のファイルに書き込まれた処理を実行することを紹介した。プロファイルに、ssh.exeを格納したbinフォルダを環境変数PATHに設定する処理を書き込んだことを思い出していただきたい。同じ要領で、chcpコマンドも追加すればよいのだ。

まず、メモ帳(notepad)を起動して、プロファイルを開く。

プロファイルを開く

前回設定した内容に、「chcp 65001」を追加する。

「65001」をパラメータに指定したchcpコマンドを追加

保存したら、PowerShellを再起動してみよう。すると、手動でchcpコマンドを実行しなくても、きちんと日本語が表示されるようになっているはずだ。

なお、WindowsではPowerShellを使いこなせると、いろいろな処理を自動化して良い意味での”手抜き”ができるようになる。「こいつを使えば楽ができる」と覚えておいていただければと思う。

今回のおさらい

今回のおさらいを以下にまとめておこう。

  • 使用フォントがコード・ページで表示できるものでないと、文字化けする
  • サーバ側とクライアント側でコード・ページが一致しないと、文字化けする
  • PowerShellのフォントをMSゴシックに変更する
  • PowerShellのコード・ページをUTF-8に変更する
  • プロファイルを変更して、設定を自動的に適用するようにする

Mac OS XやLinuxではこのあたりの設定が最初からできているので、その点、Windowsは”ちょいと面倒”な印象がある。しかし、Windowsがビジネスで利用されるOSの過半数を占めている今、使わざるを得ないケースも少なくない。ならば、工夫して使うしかないのだ。厳しい企業だと、ちょっとしたアプリケーションのインストールにも許可を得る必要があるが、PowerShellで事が済むなら、少しは気が楽だろう。