@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を使ってるんじゃないんですかね?