XML のエンコーディングを UTF-8 にする関数

pulldom が EUC-JP 他に対応していなかったので作った手抜き関数.

def xml_encoding_hack(xml):
    s = xml.splitlines()[0]
    if s.find('<?xml') == -1:
        return xml
    import re
    e = re.compile('encoding="([^"]+)"')
    m = e.search(s)
    if m == None:
        return xml
    try:
        xml = xml.decode(m.group(1)).encode('utf-8')
    except:
        return xml
    x = xml.splitlines()
    x[0] = e.sub('encoding="UTF-8"', x[0])
    return '\n'.join(x)