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"