読者です 読者をやめる 読者になる 読者になる

ElementTreeでダメなsjisファイルを読む方法

以前からsjisのダメな文字('\'を含む文字、表能ソなど)を含むxmlファイルがpythonのElementTreeで読めなくて困っていました。いろいろ試してみて解法が見つかったのでメモしておきます。

<?xml version="1.0" encoding="shift_jis"?>
<root>
  <data>表能ソ</data>
</root>

hoge.xml ダメなxmlファイル

import os
import sys
import xml.etree.ElementTree as et

# ファイルを読み込む
data = open('hoge.xml').read()
# unicode化
data = unicode(data, 'cp932')
# エンコーディングをutf8に変更
data = data.replace('encoding="shift_jis"', 'encoding="utf-8"')
data = data.encode('utf-8')

# xml読み込み
xml = et.fromstring(data)

最初et.fromstring()にそのままunicodeを渡せばいんじゃね?って思ったんですがうまくいかず。unicodeではなくstr形式のutf-8にして渡せば万事okみたいです。
こんな簡単だったとは!