perlでShift_JISファイルを読み込みUTF-8で出力
Encode.pmとPerlIOの備忘録も兼ねて。
perlでShift_JISのCSVを読み込みUTF-8にて標準出力に出力。CSVの解析はText::CSV_XSを使用、PerlIOを使って入出力。
#!/usr/bin/perl use strict; use warnings; use Text::CSV_XS; use utf8; # このファイルはUTF-8 use Encode; use open IN => ':encoding(shiftjis)'; binmode STDOUT => ':utf8'; if ($#ARGV == -1) { print STDERR "$0 CSV-file\n"; exit 1; } my $CSV_FILE = $ARGV[0]; #my $csv = Text::CSV_XS->new({binary => 1, eol => "\x0d\x0a"}); my $csv = Text::CSV_XS->new({binary => 1}); # Shift_JISをdecodeして内部コード(unicodeフラグ付き)に変換して読み込む # use openを指定しない場合はこちら #open(my $fh, "<:encoding(shiftjis)", $CSV_FILE) open(my $fh, $CSV_FILE) or die("Can not open $CSV_FILE:$!\n"); while (my $row = $csv->getline($fh)) { # 第一カラム my $col0 = $row->[0]; if ($csv->combine(@$row)) { my $allcols = $csv->string(); # binmodeの指定により、内部コード(unicodeフラグ付き)をUTF-8にencodeして出力される。 print "第一カラム[$col0]:該当CSV行 = " . $allcols . "\n"; } } close($fh);