@kyanny's blog

My thoughts, my life. Views/opinions are my own.

BOM をつけたり消したりする楽な方法がわからない

BOM つきファイルがいろいろ悪さをしたりするので、それを取りたいのですが、エディタで開いて保存しなおす、というブラックボックスな感じのやり方じゃなくプログラムで「どれについてる」とかが分かりながらまとめて BOM を外したりついてるかどうか確認したりしたい、のですがうまくいきません。というかやり方がわかりません。正規表現とか ord とか chr とかは見たくもないのでできるだけそういうものを自分で使わずになんとかしたいのですが、うーん、ぐぐってもあまり情報が見つからず。。 FIle::BOM というのも見てみましたが、いまいちやりたいことと違うような、やりたいこともできるんだろうけど perldoc をみても何をやってる例なのかわかりませんでした。

嫌々ながら、こんなのをかいてみて、

while (<>) {
    my @char = split //, $_;
    for my $chr (@char) {
        print unpack("H2", pack("C", ord($chr))), "\n";
    }
}

./bom.pl bom.html

とかやると、

ef
bb
bf
5b
25
20
50
52
4f
43

こんなんが出てくるので、 \xEF\xBB\xBF が含まれているので BOM つき、というところまでできました。あーしんどい。。

Perl の数値変換 のページには本当に毎度毎度、何度もお世話になってます。

さらに

    print unpack("H*", $_);

これだけでいいみたい、これだと split もしなくてよくてまぁいいかな?と言う感じです。