IT Office Nishimiyahara

個人用スマホから商用プログラミングまでなんでもお任せ下さい

WindowsPowerShell+Test::Moreでテストの時の文字化けを解消する方法

      2014/04/14

@nqounetです.

ここのところ,MacでもリロードするのにF5を押したり(もちろん動きません)しています.

私なりの結論

文字化けを解消するにはTest::Builder::_print_to_fhを再定義するのがいいのかなと思っています.

変更したのはprintの部分で,encodeの処理を加えただけです.

いろいろ試しているうちにfind_encodingを消してしまったのすが,これだったらfind_encodingを使ったほうが速そうです.

実際のスクリプトは,Test::Mojoを継承してゴニョゴニョしているものなので,この状態で動くかどうかはわかりません.

いずれにしろ,プライベートな関数を再定義しているので行儀が良いわけではありません.

Test::More->builder

結論を書いたところで,試行錯誤をたどります.

意図的に出力する分については,以前の記事で文字化けを解消できたのですが,テストが失敗した時に自動的に出してくれる出力が文字化けのままでした.

どうにかしたいな〜と思いながらTest::Moreのドキュメントを読んでいて,今更ですがWide character in printについて書いてあるのを発見しました.

Test::More->builderを使って,各種ハンドルをbinmodeでencodeする方法です.

これは良さそうです,ということで試したのですが,どうもうまく行きませんでした.

どこかで変なミスをしたのかもしれないのですが,cp932にマッピングされていない文字がある!,というふうに文字ごとに警告がでました.

正確な文字コードは忘れましたが,すべての文字に何かがくっついていた感じです.

もしかすると,変数をやめてcp932を直打ちしたかもしれませんが,結果は同じだったと思います.

メモってなくて記憶で書いているのでアレですが.

use open

そして,もう一つの方法も試しましたが,こちらも残念ながら動きませんでした.

これも直打ちしたかもしれませんが,(以下略

念のためBEGINを使ってみましたが,同じだったような気がします.

メモってなくて(以下略

エラー(警告)の出力に注目

ここで,先に試した「cp932にマッピングされていない」という感じのエラーですが,全部同じ行で出ていました.

そこにあったのが,Test::Builder::_print_to_fhでした.

前後を見てみましたが,printしているのはここだけっぽいので,それじゃあって感じでencodeして出力するように再定義してみました.

嫌なエラーも消え,文字化けも解消されました.

めでたしめでたし.

UTF-8のコマンドプロンプトが欲しい

高望みしているつもりはないんですけどね….

Windowsも内部的にはUTF-8を使ってるんじゃないんですかね?

respo

respo link

ZenBackWidget

 - 情報技術について ,