はじめに
コマンドラインツールをPHPで作っているのですが、Windows7で実行するときに、cmd.exeではUTF-8が文字化けしてしまいました。
そこでWindows7でUTF-8が表示できるコンソールを実現しました。
(2015年2月24日:Windows8.1について追記しました。)
作戦
作戦としては以下が考えられます。
- Cygwinのような、異なるシェルをインストールする。
- cmd.exeのコードページを変えてUTF-8が表示できるようにする。
- php.iniを編集してphp.exeの出力がShift_JISになるようにする。
1点目のCygwinは、何かと肥大しがちなのでシェルだけのためにインストールしたくありません。
2点目については、Windows7のcmd.exeはUTF-8での日本語表示は正式対応していないようです。FineView Software Labsさんの、「雑技>エディタ/コンソール」のページの「コマンドプロンプト と Unicode」の章には、貴重なトライアルの様子が書かれています。
また別のサイトには「cp932でフォントをMSゴシックにしてからchcp 65001する」と可能な旨が書かれていましたが、私の環境ではできませんでした。裏ワザ的な対応はバージョンや環境に左右されそうですね。
3点目についてはiniファイルを作る前に、コード内でset_iniでいろいろと書いてみたのですが、実現できませんでした。
telnetdを使う
「そういえばWindowsにtelnetdがあったような。ターミナルの文字コードをUTF-8にしてTelnet接続すればどうだろう?」と思い、Google先生に聞いてみると、telnetd(Telnetサーバー)はWindows7にもあるようです。
手順を以下に簡単に示します。
- 「コントロールパネル>プログラムと機能」を開く
- 「Windowsの機能の有効化または無効化」をクリック
- 「Windowsの機能」のダイアログにて、「Telnetサーバー」にチェックをいれ、「OK」をクリック
- 「コントロールパネル>プログラムと機能>サービス」を開く
- リストより「Telnet」をダブルクリック
- 「Telnetのプロパティ」のダイアログにて、「開始」をクリック
- 起動時に自動実行する場合は「スタートアップの種類」を「自動」にして「OK」をクリックする。(セキュリティにご注意。)
<2015年2月24日追記:Windows 8.1の場合>
Windows8.1では、上の4点目にて、「コントロールパネル>プログラムの機能」に「サービス」がありません。サービスの設定は以下のように開きます。
- Windowsキー+Xにて開くメニューより、「コンピューターの管理」を選択。
- 「コンピューターの管理」が開くので、左のツリーより「サービスとアプリケーション>サービス」を選択。
さらには、ログインする前に「TelnetClients」というユーザーグループにユーザーを追加してく必要があります。
- Windowsキー+Xにて開くメニューより、「コマンドプロンプト(管理者)」を選択。
- コマンド「
net localgroup TelnetClients <user> /add
」を入力。ここに<user>はWindows上のユーザー名です。
</2015年2月24日追記>
ターミナルソフトから接続
ターミナルソフト(例えばPoderosa)を起動し、サーバーに「localhost」、接続に「telnet」を選択して自分自身にtelnet接続します。
Windowsにログインするときの名前とパスワードでログインします。
このようにUTF-8が表示できるようになりました。
まとめ
目的は達成しました。
しかし、Tabキーでのパス入力保管や、上下キーでのコマンド履歴参照ができません。orz。
これらは無意識で入力してしまうので、そのたびにカーソルが移動してちょっとストレス。
とりあえず、新たにソフトをインストールしたり、レジストリをいじったりせずに、お手軽にUTF-8コンソールが実現できました。