Yoichi's diary


2015-02-13

_ [Windows] chcp.exe

日本語版のVisual Studioを使って Jenkins でビルドしたときに、 ビルドログではちゃんと読めるのに、Warnings plugin の詳細で見ると日本語の警告文字列が化けるという状況で長い間放置していた(文字化けしていないasciiの部分で警告番号と場所はわかるので我慢しながら使っていた)。

ビルド待ちの時間に手を動かす気が出てきたので、対策検討。 まずはメッセージを英語にして逃げられないかと、 devenv /LCID でEnglishのid 1033 を指定してみたが、警告は日本語のままだった。

If the specified language is not available on the user's system, the /LCID switch is ignored.

なので日本語版でインストールした場合は日本語のメッセージしか入ってないものと思われる。

次に、出力のエンコーディングを変えてやればどうだろうと思い、msbuild とか devenv のオプションを見たがそんなものはなかったので、"cmd.exe output encoding” で検索して What encoding/code page is cmd.exe using にたどり着いて、chcp.exe の存在を知った。

さて、Jenkinsのバッチの実行で msbuild を叩いていたのだが、その手前に

chcp 65001

と書いてutf-8で出力するようにしたところ、 Warnings plugin の集計結果の日本語の警告文字列が化けずに表示されました(参照: Chcp, Code Page Identifiers)

これで楽しく警告を読めます。

(追記) Jenkins自体が出すメッセージとの兼ね合いで「コンソール出力」が化けてしまうので、環境変数 JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8 の設定も必要だった。