#!/usr/local/bin/perl # Copyright (C)1995-2000 ASH multimedia lab. (http://ash.jp/) # # 文字コード判定コマンド # require "chkstr.pl"; $MAXBUF = 65535; $prog_name = ''; $dbg = 0; &main(); # メイン処理 # 使用方法の表示 sub usage { printf("Usage: %s files\n", $prog_name); printf(" files: 判定ファイル名\n"); exit(-1); } # メイン処理 sub main { local $file_open; my ($file, @opt_data); # デフォルトパラメータの設定 $prog_name = $0; # オプションの解析 while ($#ARGV >= 0) { if ($ARGV[0] eq "-x") { # デバッグ情報表示 $dbg = 1; } elsif ($ARGV[0] =~ /^-/) { # 使用方法の表示 &usage(); } else { last; } shift(@ARGV); } @opt_data = @ARGV; if ($dbg) {print"file = @opt_data\n";} # 入力ファイルのオープン if (@opt_data) { foreach $file (@opt_data) { if (-d $file) {next;} printf ("%s:\t", $file); $file_open = "<$file"; if (!open(FILE_IN, $file_open)) { printf("File open error.\n"); next; } &_getcode(FILE_IN); close(FILE_IN); } } else { # 指定なしの場合、標準入力 &_getcode(STDIN); } } # 文字コード判定サブルーチン sub _getcode { my ($fp) = @_; my ($rtn, $len); $len = read($fp, $buf, $MAXBUF); $rtn = &getcode($buf, $len); if ($rtn == 0) { printf("ASCII text\n"); } elsif ($rtn == 1) { printf("JIS text\n"); } elsif ($rtn == 2) { printf("SJIS text\n"); } elsif ($rtn == 3) { printf("EUC text\n"); } elsif ($rtn == 4) { printf("Unknown(EUC/SJIS) text\n"); } else { printf("Binary file\n"); } }