Forum: Rails-ES Detectar el charset en araña web

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
0e6c0ba9935b52866fd5c54dd886cf2e?d=identicon&s=25 Jaime Iniesta (Guest)
on 2007-05-22 11:29
(Received via mailing list)
Hola!

Estoy haciendo una arañita web con open-uri, a la que le das una URL y
te devuelve el título, meta keywords y meta description de la web. Muy
sencillita y funciona bien, pero a veces tiene problemas la pobre con
la codificación de caracteres, ya que unas webs están en utf8, otras
en iso-8859-1, etc...

Con iconv puedo convertir de una codificación a otra, pero ¿se puede
detectar automáticamente la codificación de las webs de origen? ¿O la
única manera es buscar una línea en el HTML en plan...

<meta http-equiv="content-type" content="text/html; charset=iso-8859-1"
/>

y fiarse de que hayan puesto la codificación correcta?

¿Sería mejor si usara otra cosa en lugar de open-uri, algo que
resuelva este problema por sí solo?
5c15703984caa012845b3cea129da936?d=identicon&s=25 Manuel González Noriega (Guest)
on 2007-05-22 11:38
(Received via mailing list)
On 22/05/07, Jaime Iniesta <jaimeiniesta@gmail.com> wrote:
> Hola!
>
> Con iconv puedo convertir de una codificación a otra, pero ¿se puede
> detectar automáticamente la codificación de las webs de origen? ¿O la
> única manera es buscar una línea en el HTML en plan...
>
> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
>
> y fiarse de que hayan puesto la codificación correcta?
>

La forma correcta es detectar el parametro charset del header
Content-type y, como seguridad, comprobar también el valor del
atributo charset en el elemento meta correspondiente.

Si los dos difieren, el agente de usuario debe dar prioridad al primero.

Más info

http://www.w3.org/International/O-charset
http://www.w3.org/International/tutorials/tutorial-char-enc/



--
Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.
0e6c0ba9935b52866fd5c54dd886cf2e?d=identicon&s=25 Jaime Iniesta (Guest)
on 2007-05-22 11:46
(Received via mailing list)
El 22/05/07, Manuel González Noriega
<manuel.gonzalez.noriega@gmail.com>
escribió:> La forma correcta es detectar el parametro charset del header
> Content-type y, como seguridad, comprobar también el valor del
> atributo charset en el elemento meta correspondiente.

Gracias Manuel, tenía que haber mirado mejor la documentación de
open-uri, que tiene un método "charset" para esto :)
1f2eadfb41362800ebc2cf211b91d0f7?d=identicon&s=25 javier ramirez (Guest)
on 2007-05-22 11:47
(Received via mailing list)
Hola Jaime,
> Con iconv puedo convertir de una codificación a otra, pero ¿se puede
> detectar automáticamente la codificación de las webs de origen? ¿O la
> única manera es buscar una línea en el HTML en plan...
>
en openuri, en el bloque del open con la variable de control puedes
directamente preguntar por charset y te lo devuelve si está definido.
Por defecto si no está te devuelve iso-8859-1 que es lo que dice el rfc
por defecto a no ser que digas otra cosa en la cabecera.

Eso no significa que la página luego realmente esté codificada en el
charset que te dicen, pero en ese caso la página está mal hecha y poco
puedes hacer.  Siempre puedes tirar del charset que te diga openuri para
hacer el conv y si te da una excepción dejarlo sin convertir.

También me suena que había una librería que a partir de una cadena
cualquiera trataba de adivinar el enconding, pero no recuerdo el nombre
y tampoco era fiable al 100%.

saludos,

javier ramírez
7223c62b7310e164eb79c740188abbda?d=identicon&s=25 Xavier Noria (Guest)
on 2007-05-22 11:53
(Received via mailing list)
On May 22, 2007, at 11:28 AM, Jaime Iniesta wrote:

> <meta http-equiv="content-type" content="text/html;
> charset=iso-8859-1" />
>
> y fiarse de que hayan puesto la codificación correcta?
>
> ¿Sería mejor si usara otra cosa en lugar de open-uri, algo que
> resuelva este problema por sí solo?

En HTTP quien decide el charset sobre el papel es la cabecera Content-
Type, pero a la practica no siempre viene bien. La cosa seria:

   1. Ver si viene charset en la cabecera Content-Type.

   2. Si no, buscarlo en tag META con un parser o una expresion
regular[*].

   3. Si no, pasarle la pagina a la libreria charguess.

-- fxn

[*] Aqui una expresion regular puede ser fragil, los atributos pueden
venir en distinto orden, llevar o no comillas, simples o dobles, ...
0e6c0ba9935b52866fd5c54dd886cf2e?d=identicon&s=25 Jaime Iniesta (Guest)
on 2007-05-23 19:33
(Received via mailing list)
El 22/05/07, Xavier Noria <fxn@hashref.com>
escribió:> En HTTP quien decide el charset sobre el papel es la cabecera 
Content-
> Type, pero a la practica no siempre viene bien. La cosa seria:
>
>    1. Ver si viene charset en la cabecera Content-Type.
>
>    2. Si no, buscarlo en tag META con un parser o una expresion
> regular[*].
>
>    3. Si no, pasarle la pagina a la libreria charguess.

O sea, que paciencia con el tema charset... :) A ver si en los
próximos días lo afino a mi arañita experimental:

http://boris.railes.net
This topic is locked and can not be replied to.