#! /usr/bin/rubyパスの通ったところにguessという名前で置いて
require 'kconv'
class String
def guess
encode = Kconv.guess(self) rescue Kconv::UNKNOWN
ret = case encode
when Kconv::JIS
'jis'
when Kconv::EUC
'euc'
when Kconv::SJIS
'sjis'
when Kconv::BINARY
'bin'
when Kconv::ASCII
'ascii'
when Kconv::UTF8
'utf8'
when Kconv::UTF16
'utf16'
else
'unknown'
end
unless ret == 'bin' or ret == 'unknown'
if include?("\r\n")
ret << ', CRLF'
elsif include?("\r")
ret << ', CR'
elsif include?("\n")
ret << ', LF'
else
ret << ', unknown'
end
end
ret
end
end
if ARGV.empty?
print $stdin.read.guess, "\n"
else
len = ARGV.map do |name|
name.length
end.max
ARGV.each do |name|
begin
File.open(name) do |fp|
printf("%-#{len}s : %s\n", name, fp.read.guess)
end
rescue
end
end
end
% guess foo.txt bar.txtのように使う。ファイル名を省略したら標準入力を対象とする。
やってることは、単にRubyのKconv.guessへ丸投げ。
0 件のコメント:
コメントを投稿