Help us understand the problem. What is going on with this article?

テキストファイルのエンコーディングを自動判定して処理する

More than 5 years have passed since last update.

テキストのエンコーディングを調べるには、
片っ端からdecodeしてみてデコード成功したものを利用するといいらしい。

def conv_encoding(data):
    lookup = ('utf_8', 'euc_jp', 'euc_jis_2004', 'euc_jisx0213',
            'shift_jis', 'shift_jis_2004','shift_jisx0213',
            'iso2022jp', 'iso2022_jp_1', 'iso2022_jp_2', 'iso2022_jp_3',
            'iso2022_jp_ext','latin_1', 'ascii')
    encode = None
    for encoding in lookup:
      try:
        data = data.decode(encoding)
        encode = encoding
        break
      except:
        pass
    if isinstance(data, unicode):
        return data,encode
    else:
        raise LookupError

#ファイル読込とエンコーディングの調査
fp = open(path,'r')
str,encoding = None,None
try:
  str,encoding = conv_encoding(fp.read())
finally:
  fp.close()

#内容の編集
...<任意のコード>


#元のエンコーディングでファイル書き込み
fp = open(path,'w')
try:
  fp.write(str.encode(encoding))
finally:
  fp.close()

zarchis
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away