将unicode字符编码为Python中的HTML实体,不包括标记

时间:2011-08-27 19:52:11

标签: python html email beautifulsoup lxml

您可能知道,要使电子邮件在许多客户端中有效,必须对所有unicode字符进行编码。我想在Python脚本中自动化这种编码。

显然标签需要从转换中排除,否则html将无法正常工作 - 这样做真的很复杂 - 为了确保成功,必须使用像lxml或beautifulsoup这样的解析包。

据我所知,这两个软件包都不支持转换为编号的unicode实体,例如& #x6F22; (汉)

任何帮助都非常宝贵,我一整天都在撞墙!

2 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,但是在原始文本上运行以下表达式总是足够的,它只是将十六进制实体转换为十进制实体,然后将其解析得很好:

>>> hex_entity_pat = re.compile('&#x([^;]+);')
>>> hex_entity_fix = lambda x: hex_entity_pat.sub(lambda m: '&#%d;' % int(m.group(1), 16), x) # convert hex to dec entities
>>> BeautifulSoup(hex_entity_fix("<b>&#x6F22;</b>"), convertEntities=BeautifulSoup.ALL_ENTITIES)
<b>漢</b>

答案 1 :(得分:0)

我假设您的电子邮件是HTML格式,而不是纯文本格式。我想你正在寻找这个:

some_unicode_string.encode('ascii', errors='xmlcharrefreplace')

但也许你可以通过其他方式做到这一点。你如何首先生成HTML?