Python: lxmlの文字コード(tostring())

2012/02/19

lxmlは文字コードを厳格に定義しており、入力時は必ず「unicode」化しておく必要があります。

これだけでも注意しておかなければならない点ですが、lxmlには、出力用の「tostring()」というメソッドを持っており、ここでも文字コードの注意が必要となってきます。

tostring()を使うと、取得した任意のDOM要素に対して文字列展開ができます。

例えば以下のような感じです。

 

    from lxml import etree
    dom = etree.fromstring(u'<p>Hello<br>world!</p>', parser=HTMLParser())
    enums = dom.xpath("//p")
    etree.tostring(enums[0], method='text', encoding="utf-8")

その際、「encoding」属性で出力時の文字コードを指定する必要があることに注意して下さい。

これが無いと文字化けしてしまいます。

 

ちなみに「tostring()」を使うとテキストを抽出する意外にXML化したりHTML化したりすることができます。

 

    dom = etree.fromstring(u'<p>Hello<br>world!</p>', parser=HTMLParser())
    enums = dom.xpath("/")
    etree.tostring(enums[0], method='xml', encoding="utf-8")
    >>> '<p>Hello<br/>world!</p>'
    etree.tostring(enums[0], method='html', encoding="utf-8")
    >>> '<p>Hello<br>world!</p>'
    etree.tostring(enums[0], method='text', encoding="utf-8")
    >>> 'Helloworld!'

blog comments powered by Disqus
カテゴリー