2012年4月1日日曜日

文字コードの判別

指定されたファイルの文字コードを判別して表示するスクリプト。雑だけれど、改行コードも見ている。

#! /usr/bin/ruby
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という名前で置いて
% guess foo.txt bar.txt
のように使う。ファイル名を省略したら標準入力を対象とする。
やってることは、単にRubyのKconv.guessへ丸投げ。

0 件のコメント:

コメントを投稿