@nqounetです.
今日,PowerShellで使える環境を整えた(つもりの)WindowsマシンでPerlで書いたテストを実行してみたんですよ.
そしたら文字化け!
UTF-8のこの時代に,まだ文字化けで悩まなければならないことが本当に辛い.
思ったよりも苦労した(思い出せなかった)のでメモ.
Term::EncodingとEncode
さすがにEncodeは忘れませんが,Term::Encodingが出てこなくて困りました.
Term::Encodingはターミナルの文字コードを返してくれます.
うまく行ったコードは,結局のところ超基本形でした.
|
|
実は,役に立ったのは自分の記事(というか,自分で書いた記事を意識して検索したんですが)でした.
基本はこれで,必要な出力に対して「encode」してやることで文字化けが解消されました.
binmodeがうまく使えなかった
結論が出たところで,思考を追っていきます.
最初はPerl入学式でも使ったお約束を利用した方法で,自動的にEncodeとDecodeを行う方法を試したのですが,残念ながらテストの出力には効果がありませんでした.
書き方がまずかったのかもしれませんが.
|
|
shiftjisがcp932だったら違うのかもしれませんが後の祭り.
何故うまくいかないのかを考えるよりは,さっさとWindowsのせいにして次に進むほうが良さそうだと思いました.
find_encodingが思い出せなかった
次の案としては,地道に出力時にencodeしてやる方法です.
Encode::encodeは,通常,文字コードを指定してやる必要がありますが,予めfind_encodingしておくと,Encodeモジュール内で文字コードを調べる必要がなくなり,高速化が図れます.
ターミナルのコードは途中から変わることはないので,最初にterm_encodingで取得しておき,それを元にEncode::find_encodingでencodeするオブジェクトを作っておけば,文字化けせずに表示されるということです.