ページ

2010年12月16日

PythonでHTML数値文字参照を文字列に変換

ちょっと前にHTML数値文字参照を文字列に変換したくなりましたが、適当なライブラリはここまでは面倒は見てくれませんでした。HTML数値文字参照、っていう名称が正しいかしませんが、ሴみたいなやつです。これを文字列に変換したいのです。3分間グーグル様に問い合わせても教えて貰えないので、自前で変換することになってしまいました。

import re

def unescape(s):
    pattern = re.compile('(&#x([0-9a-fA-F]{4});)')
    return pattern.sub(lambda x: unichr(int(x.group(2), 16)), s)

それじゃ、その逆っていうことで、

def escape(s):
    return ''.join(("&#x" + hex(ord(c))[2:] + ";"  for c in s))

これで「ほげ」を変換すると、ほげとなります。でもASCIIコードまでエスケープされるのはいやだな〜、ということで、

def escape(s):
    pattern =  = re.compile(u'([\u00ff-\uffff])')
    return pattern.sub(lambda x: "&#x" + hex(ord(x.group(1)))[2:] + ";", s)

これで、「ほげtest」はきっと、u'ほげtest'となるはず。範囲が00ffからでいいかどうかと、maxがffffでいいかはどうかはあるんですがね。

でわでわ

0 件のコメント: