Windows7でUTF-8のコンソール

はじめに

コマンドラインツールをPHPで作っているのですが、Windows7で実行するときに、cmd.exeではUTF-8が文字化けしてしまいました。

そこでWindows7でUTF-8が表示できるコンソールを実現しました。

(2015年2月24日:Windows8.1について追記しました。)

cmd.exe

作戦

作戦としては以下が考えられます。

  • 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コンソールが実現できました。

コメントを残す