Кодировать символы Юникода в объекты HTML в Python, исключая теги - PullRequest
2 голосов
/ 27 августа 2011

Как вы, возможно, знаете, для того, чтобы электронная почта была действительной во многих клиентах, все символы Unicode должны быть закодированы.Я хотел бы автоматизировать эту кодировку в скрипте Python.

Очевидно, что теги нужно исключить из конвертации, иначе HTML не сработает - это действительно сложная часть, чтобы быть уверенным в успехе.необходимо использовать пакет синтаксического анализа, такой как lxml или beautifulsoup.

Насколько я знаю, ни один из этих двух пакетов не поддерживает преобразование в пронумерованные объекты юникода, такие как & # x6F22;(漢)

Любая помощь была бы действительно неоценимой, я весь день бился головой об эту стену!

Ответы [ 2 ]

0 голосов
/ 28 июля 2012

Я предполагаю, что ваши электронные письма в формате HTML, а не в виде обычного текста. Я думаю, что вы ищете это:

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

Но, может быть, вы можете сделать это другим способом. Как вы генерируете HTML в первую очередь?

0 голосов
/ 18 сентября 2011

У меня была похожая проблема, однако этого всегда было достаточно, чтобы выполнить следующее выражение для необработанного текста, который просто преобразует шестнадцатеричные сущности в десятичные, которые затем анализируются очень хорошо:

>>> 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>
...