perlでのShift_JIS,cp932の扱いテスト
perlにencodingを指定するとき、shiftjisなのかcp932なのかちゃんと考えないといけない。でないと全角マイナスの扱いが違ってくる。
hz.pl
#!/usr/bin/perl use strict; use warnings; use utf8; use Encode; use Data::Dumper; binmode STDOUT => 'utf8'; # hz.txtの最後の文字が調査したい文字 #open F, "<:encoding(shiftjis)", "hz.txt"; #open F, "<:encoding(Windows-31J)", "hz.txt"; open F, "<:encoding(cp932)", "hz.txt"; while (<F>) { /(.)$/; my $hex = sprintf("%02X", ord($1)); print "半角ハイフン" if /\x{2D}$/; print "全角長音" if /\x{30FC}$/; print "shiftjis指定時の全角マイナス" if /\x{2212}$/; print "cp932(Windows-31J)指定時の全角マイナス" if /\x{FF0D}$/; print "全角ハイフン" if /\x{2010}$/; print "全角ダッシュ" if /\x{2015}$/; print " code = [0x${hex}] string: $_"; # print Dumper($_); } close(F);
実行
$ perl hz.pl hz.txt 半角ハイフン code = [0x2D] string: 半角ハイフン- 全角長音 code = [0x30FC] string: 全角長音ー cp932(Windows-31J)指定時の全角マイナス code = [0xFF0D] string: 全角マイナス− 全角ダッシュ code = [0x2015] string: 全角ダッシュ― 全角ハイフン code = [0x2010] string: 全角ハイフン‐ $
考察
Windowsで作られたファイルについてはやはりCP932を指定するべきと思われる。