在Python中编码Unicode字符为HTML实体,排除标签
你可能知道,为了让电子邮件在很多客户端中有效,所有的unicode字符都必须进行编码。我想在一个Python脚本中自动化这个编码过程。
显然,标签需要被排除在转换之外,否则HTML就无法正常工作——这部分其实是比较复杂的。为了确保成功,必须使用像lxml或beautifulsoup这样的解析库。
据我所知,这两个库都不支持将字符转换为带编号的unicode实体,比如 #x6F22; (汉)。
任何帮助都将非常宝贵,我今天一直在为这个问题苦恼!
2 个回答
0
我假设你的邮件是用HTML格式写的,而不是普通文本。我觉得你在寻找这个:
some_unicode_string.encode('ascii', errors='xmlcharrefreplace')
不过,也许你可以用其他方法来实现。你最开始是怎么生成这些HTML的呢?
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>漢</b>"), convertEntities=BeautifulSoup.ALL_ENTITIES)
<b>漢</b>