Estoy luchando con esto por un tiempo ahora. El siguiente fragmento de código devuelve None para algunos sitios web incluso si el juego de caracteres se presenta en el meta del encabezado, por lo que no parece ser una forma confiable de obtener el juego de caracteres adecuado de una página web.

conn = urllib2.urlopen(req)
charset = conn.headers.getparam('charset')

Leí varios hilos aquí en SO y algunas menciones para usar chardet pero no quiero importar un módulo adicional si es posible. En cambio, estoy pensando en descargar solo el encabezado y obtener la información del juego de caracteres utilizando algunas funciones de cadena.

¿Alguien tiene una mejor idea?

3
g0m3z 2 sep. 2014 a las 17:25

2 respuestas

La mejor respuesta

conn.headers.getparam('charset') no analiza el contenido html (etiqueta <meta>) solo se ve en los encabezados http (por ejemplo, Content-Type).

Podría usar un analizador html para obtener la codificación de caracteres si no se especifica en los encabezados http.

2
Community 23 may. 2017 a las 11:57

Mover mi comentario aquí y publicarlo como respuesta.

Gracias a @ J.F. Sebastian, pude obtener el juego de caracteres de la metaetiqueta usando el fragmento de código siguiente:

conn = urllib2.urlopen(url)
site = parse(conn).getroot()
charset = site.cssselect('meta[http-equiv="Content-Type"]')[0].get('content').split("chars‌​et=",1)[1]
0
g0m3z 3 sep. 2014 a las 11:50