perl スクリプトを使用して別のサーバーから CSV ファイルをダウンロードします。ダウンロード後、ファイルに破損したデータが含まれていないかどうかを確認したいと思います。Encode::Detect::Detector を使用してエンコーディングを検出しようとしましたが、どちらの場合も「undef」を返します。
- 文字列が ASCII の場合、または
- 文字列が壊れている場合
したがって、以下のプログラムを使用すると、ASCII データと破損データを区別できません。
use strict;
use Text::CSV;
use Encode::Detect::Detector;
use XML::Simple;
use Encode;
require Encode::Detect;
my @rows;
my $init_file = "new-data-jp-2013-8-8.csv";
my $csv = Text::CSV->new ( { binary => 1 } )
or die "Cannot use CSV: ".Text::CSV->error_diag ();
open my $fh, $init_file or die $init_file.": $!";
while ( my $row = $csv->getline( $fh ) ) {
my @fields = @$row; # get line into array
for (my $i=1; $i<=23; $i++){ # I already know that CSV file has 23 columns
if ((Encode::Detect::Detector::detect($fields[$i-1])) eq undef){
print "the encoding is undef in col".$i.
" where field is ".$fields[$i-1].
" and its length is ".length($fields[$i-1])." \n";
}
else {
my $string = decode("Detect", $fields[$i-1]);
print "this is string print ".$string.
" the encoding is ".Encode::Detect::Detector::detect($fields[$i-1]).
" and its length is ".length($fields[$i-1])."\n";
}
}
}