Estás mirando la versión 3 de mi sitio web, para ver la última versión por favor anda a juque.cl

juque

Juan Pablo Aqueveque: Ingeniero de Sistemas, Diseñador y Desarrollador Web que reside en Temuco, Chile.

Limpiar UTF8 corrupto

Publicado por Juan Pablo el 10.Jul.2007 | Comentarios (17)

Aunque el título no es el más adecuado sí se da a entender para el motivo de esta entrada, el título debería ser “Limpiar Latin1 corrupto” pero para un mejor posicionamiento elegí el actual título, pero vamos al grano (como dijo el dermatólogo).

¿A más de alguien le ha pasado que al intentar migrar el contenido de un sitio o blog de ISO-8859-1 a UTF-8 le ha dado un resultado horroroso?, o posiblemente ¿a más de algún otro le ha llegado un correo electrónico que no logra entender del todo porque tiene caracteres basura?, ¿Por qué ocurre?.

Algunos datos:

Por lo tanto cualquier caracter que esté debajo del 127 es perfectamente compatible con utf-8, ¿pero qué sucede cuando los caracteres son superiores al 127?, aquí es donde ocurren los problemas de compatibilidad.

Ejemplos de cómo codifica ISO-8859-1

  1. Tómese el caracter A: su representación hexadecimal es 41, y su representación decimal es 65 y 65 es menor que 127, por lo tanto no hay problemas.
  2. Tómese ahora el caracter ñ: su representación hexadecimal es F1, el decimal de F1 es 241, lo que es mayor que 127, por lo tanto iso-8859-1 lo representará según su propia tabla.

Ejemplos de cómo codifica UTF-8

  1. Tómese el caracter A: su representación hexadecimal es 41, y su representación decimal es 65 y 65 es menor que 127, todo bien.
  2. Tómese ahora el caracter ñ: su representación hexadecimal es C3 B1, dos bytes.

¿Qué ocurre cuando un caracter utf8 es mostrado en una página que dice ser ISO-8859-1?, tendremos problemas de compatibilidad, dado que para utf8 algunos caracteres pueden representarse con más de un bytes en ISO-8859-1 esto no ocurre, todos los caracteres son sólo de un bytes (256) de longitud, si para UTF8 la ñ es C3B1, para iso-8859-1 el C3 y el B1 son dos caracteres distintos, por lo tanto buscará quién es C3 y quién es B1:

Captura de pantalla de la ñ Latin1 - wikipedia

¿Te son familiares?, el gráfico mostrado es una adaptación del que aparece en wikipedia. ¿Ahora entiendes por qué se produce esta basura?.

Bien, ahora que se entendió el problema presento una pequeña aplicación que limpia el código corrupto que se genera al mostrar UTF-8 en un documento ISO-8859-1. Con ustedes: Limpia UTF-8 (pensé 3 días el nombre que le daría).

Los condimentos usados para Limpia UTF-8 fueron:

No olvides agradecer si esta pequeña aplicación te fue de utilidad.

Lecturas complementarias

Actualización: Una nota aclaratoria, esta utilidad limpia texto que fue migrado de mala forma, es decir, cuando ya no existe vuelta atrás, para cambiar la codificación de un archivo yo uso vim o bien iconv. Sobre liberar el código creo que es posible, pensaré la forma de hacerlo cómodamente para el su uso vía línea de comandos.

Enlace Permanente, Comentarios (17), Publicada en: Recursos

Comentarios

1. Ricardo Aroca
11.Jul.2007

Yo le hubiera puesto iso2utf, que aunque no es estrictamente correcto, pues ISOs existen en muchos tipos y sabores, y además existe más de un UTF, tiene la gracia de la simplicidad. En todo caso lo estuve probando y funciona "de pelos".

2. Joan Vicent Navarro Ferreres
11.Jul.2007

Hola!!

estoy buscando una aplicacion asi como el agua de mayo, de donde me la podria bajar ? ya que mis archivos a tratar son muy grandes para ponerlos en una caja de texto

3. calocen
11.Jul.2007

Hola, me parece muy útil, pero ... ¿Qué te parece si cuelgas el código con una licencia libre? Así se podrían hacer algunas utilidades derivadas, p.ej: un script shell que revise un sitio entero y devuelva una réplica limpia.

4. Joan Vicent Navarro Ferreres
11.Jul.2007

Hola!!

estoy buscando una aplicacion asi como el agua de mayo, de donde me la podria bajar ? ya que mis archivos a tratar son muy grandes para ponerlos en una caja de texto

5. anonymous
11.Jul.2007

y el codigo?

6. juanjo
11.Jul.2007

¡Te quiero!

7. guido_cc
11.Jul.2007

Juque, ¿podrías agregarle esa funcion que copia automaticamente al portapapeles lo ya corregido? O es muy complicado?

Gracias

8. juan pablo
12.Jul.2007

guido_cc: lo tendré en cuenta para un siguiente release.

9. judas_iscariote
12.Jul.2007

"talk is cheap,show me the code" ;-)

10. e-saiz
13.Jul.2007

Muchísimas gracias, ya iba a hacer replaces masivos en el editor de texto :P

Para la gente que pregunta, a la aplicación se accede por el link que aparece.

Muchas gracias.

11. e-saiz
13.Jul.2007

Por cierto, no tiene soporte para limpiar texto escrito en japonés :(

12. Pablo Noel
18.Jul.2007

te amo, con pasión gitana.

13. danielsemper
20.Jul.2007

No tendrías un script que haga lo contrario, que ne lugar de Limpiar UTF8 corrupto, Genere UTF8 corrupto, me explico:

Que una frase buena como "el Ñandú" te genere como resultado el código basura: el ÑandÃ

Esto porque necesito saber el código basura que tengo en mi BD y no encuentro un listado completo en ninguna parte para ¡

Gracias.

14. danielsemper
20.Jul.2007

Se cortó mi anterior comentario porque escribí el simbolo de "menor que" y seguro Wordpress pensó que era código y anuló la frase.

Decía:

Esto porque necesito saber el código basura que tengo en mi BD y no encuentro un listado completo en ninguna parte para ¡ (símbolo menor que) ÁÉÍÓÚ y quien sabe que otros símbolos me falten.

15. juan pablo
20.Jul.2007

Eso es simple de hacer, en tu navegador Firefox cambia la codificación de esta misma página a iso-8859-1 y verás el resultado de lo que pides.

16. danielsemper
20.Jul.2007

Gracias !!! ^_^

17. HellCat
26.Jul.2007

QUEREMOS EL CODIGO, tiralo gpl !!!!! gracias