Date: 
    2008-05-20
  
  
  
  
  
  文字コード判定して一括でuft-8に変換するPythonスクリプト¶
utf-8でのHTML作成を依頼したらEUC-JPで送られてきたので自分で変換してしまう。findとnkfを組み合わせれば良いんだろうけど、とりあえず手元にWindowsしか無かったんでPythonで作ってしまった。
カレントディレクトリ以下のテキストと思われるファイルを全てutf-8に変換する。文字コード判定というかトライ&エラー方式。 バイナリファイルは変換に失敗したらskipするという手法。画像ファイルなんかはまあ大丈夫だろうけど、誤変換しない保証はない。・・・怖。
import os, sys
def guess_charset(data):
    f = lambda d, enc: d.decode(enc) and enc
    try: return f(data, 'utf-8')
    except: pass
    try: return f(data, 'shift-jis')
    except: pass
    try: return f(data, 'euc-jp')
    except: pass
    try: return f(data, 'iso2022-jp')
    except: pass
    return None
def conv(data):
    charset = guess_charset(data)
    u = data.decode(charset)
    return u.encode('utf-8')
for dirpath, dirs, files in os.walk(os.getcwd()):
    for fn in files:
        path = os.path.join(dirpath, fn)
        fobj = file(path, 'rU')
        data = fobj.read()
        fobj.close()
        try:
            data = conv(data)
        except:
            print path, "-> skip"
            continue
        fobj = file(path, 'wU')
        fobj.write(data)
        fobj.close()
        print path, "-> converted"
