end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

perlでの文字コード判定/推測は、Encode::Guess::guess_encoding() と $enc->name

Encode::Guess - search.cpan.org

最近のperl (今回はver.5.26)では、「use utf8;」と内部のencodingが不整合の場合、 warningでなく、erorと扱うよううになった気がします。

なので、次のようなscriptを書いてみました。

#!/usr/local/bin/perl
use strict;
use warnings;
use Encode::Guess qw/cp932 utf8/;  # 優先度順に記載
use Data::Dumper;

main(@ARGV);

sub main {
    my ($file) = @_;

    open my $fh, '<:raw', $file or die "fail open $file $!";
    $/ = undef;
    my $file_content = <$fh>;
    close($fh) or die "fail open $file $!";

    my $enc = Encode::Guess::guess_encoding($file_content);
    print $enc->name,"\t$file\n";
}