Codificar caracteres unicode en entidades HTML en Python, excluyendo etiquetas

Como sabrá, para que un correo electrónico sea válido en muchos clientes, todos los caracteres Unicode deben estar codificados. Me gustaría automatizar esta codificación en un script de Python.

Obviamente, las etiquetas deben excluirse de la conversión, de lo contrario, el html no funcionará; hacer esto es realmente la parte complicada; para estar seguro del éxito, es necesario usar un paquete de análisis como lxml o beautifulsoup.

Hasta donde yo sé, ninguno de esos dos paquetes admite la conversión a entidades unicode numeradas como & # x6F22; (漢)

Cualquier ayuda sería realmente invaluable, ¡me he estado golpeando la cabeza contra esta pared todo el día!

preguntado el 27 de agosto de 11 a las 19:08

No soy un experto en estos asuntos, pero es probable que encuentre algo útil aquí: stackoverflow.com/questions/629999/… -

Asegúrese de especificar UTF-8 en los encabezados. -

2 Respuestas

Tuve un problema similar, sin embargo, siempre fue suficiente ejecutar la siguiente expresión en el texto sin procesar, que simplemente convierte entidades hexadecimales en entidades decimales, que luego se analizan sin problemas:

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

Respondido el 18 de Septiembre de 11 a las 23:09

Supongo que sus correos electrónicos están en HTML, no en texto sin formato. Creo que estás buscando esto:

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

Pero tal vez puedas hacer esto de otra manera. ¿Cómo se genera el HTML en primer lugar?

Respondido 28 Jul 12, 12:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.