文字エンコードではまりまくり
はてダのバックアップをタグで解析してDBに投げる途上で
はまった。
正直さっぱりからん。日本語を含む正規表現を適用したいのだけれど。。
スクリプトはshiftjis、対象ファイルはunicode。
push(@list,$str =~/日本語を含むパターン/sg);
ってところを解決すればいいのだけれど。
スクリプトshiftjis、対象ファイルUTF-8のとき
use Encode; $str = encode('shiftjis',decode('UTF-8',$str));
を先行してかけたらshiftjisの出力が得られる。
なんでうまくいくのかなんとなくすっきりしない。
decodeして処理、encodeして出力ってのが基本だと思ってるからなぁ。
UTF-8モードで読んでshiftjisモードに変換するの?ってことか?
なんだろうねぇ。このパターンでいけるならもうそれでイイとするのかもしれないけど。
スクリプトUTF-8、ファイルshiftjisのとき
先行フィルタを
$str = encode('UTF-8',decode('shiftjis',$str));
にするとOK。UTF-8の出力が得られる。
釈然としないけど使う事は出来そう
使用方法としては
decode→encodeしてスクリプトのエンコードにあわせる。
処理後
decode→encodeして出したい出力にする
だからUTF-8で処理したものをshifjisで出力したいなら
print encode('shiftjis',decode('UTF-8',処理後));
とかするとshiftjisの出力が得られる。windows上でshifjisのコンソール上も文字化けしない。
とかなる。
だけどdecode/encodeが結局何してるのかわかんない。混乱してくる。
ここまでの方法論がなんか違う気がするからこうすればいいんだろう
use utf8; use Encode; #utf8でスクリプトを書いて decode('読み込むエンコードスタイルたとえばshiftjis',変数); #処理... print encode('書き出したいスタイルたとえばeucjp',処理済み);
を徹底すればいいのだろう。
少し思考停止的ではある。今日はここまでにしよっと。