El infierno de la codificación de caracteres

Andaba yo haciendo un plugin de Grails para reutilizar código que se repite siempre en las aplicaciones: layouts, autenticación, etc.

Al principio todo perfecto. Hasta que me ha dado por poner una tilde en una GSP: “Iniciar sesión”. ¡Insensato! Quién me mandaría a mí osar a hacer algo así.

Alguien podría argumentar que podría haber puesto la entidad HTML correspondiente (“Iniciar sesión”). Realmente es lo suyo en las vistas. Pero aún así, eso es pan para hoy y hambre para mañana. Salvas esa situación particular. Pero cuando te vengan datos de la BBDD con tildes, tampoco se te van a mostrar. Si no consigues ver una tilde en una vista, no la verás tampoco si viene de otro lado.

La solución a esto es muy sencilla (la aprendí con sangre hace tiempo): todo en UTF-8.

Primero he sospechado de Netbeans 6.7 M2, que es lo que uso ahora para desarrollar en Grails. Por desgracia, en Netbeans no hay manera de definir/cambiar la codificación de caracteres en un proyecto Grails. Indecente que esto no se pueda hacer. Pero bueno, afortunadamente hay alternativas.

Entonces he probado con mi otro editor habitual para Grails: E Text Editor (versión para Windows de TextMate; muy recomendable. Me compré una licencia personal hace poco), en el cual sí se puede especificar claramente la codificación de caracteres al guardar el fichero. Guardándolos todos en UTF-8, nada. La tilde se seguía viendo mal.

Probé después con Vim y con JEdit. Y nada. De ahí no salía.

Después de hacer varias pruebas con proyectos de plugin nuevos (grails create-plugin) (para asegurarme que no había nada modificado) y con proyectos de aplicación nuevos (grails create-app), ha resultado ser un puñetero bug en Grails.

Esta tontería me ha costado varias horas, una brecha en la cabeza y un agujero en la pared :) . Es lo que tiene que los desarrolladores principales de Grails lo hagan todo en inglés, y que además la mayoría de usuarios también.

Compartir:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • DZone
  • email
  • Furl
  • LinkedIn
  • Meneame
  • MySpace
  • Print
  • Slashdot
  • Technorati
  • TwitThis

Did you enjoy this post? Why not leave a comment below and continue the conversation, or subscribe to my feed and get articles like this delivered automatically to your feed reader.

Comments

Totalmente de acuerdo: el futuro (y el pasado ;-) ) es UTF-8. El problema viene cuando no te das cuenta, o tienes que trabajar con una base de datos que ya está en un ISO8859 y similares…

Y lo de los acentos en Netbeans no es de recibo, desde luego. Hice la prueba hace poco de usar eclipse y netbeans con código con el javadoc en español y netbeans me cambió toda la codificación, con lo fácil que es detectar la codificación de un fichero al abrirlo, y respetarla (o pasarla internamente a UTF-8) y guardar el fichero en su codificación original.

salu2,
Abel.

Es una pena lo del Netbeans. De todas formas creo que hay una opción para que use UTF-8. O para que si ya lo está, al menos no la cambie. No estoy seguro de que funcione, pero yo he estado usando Netbeans (con proyectos, no plugins) durante un tiempo sin problemas.

En el fichero C:\Program Files\NetBeans 6.7 M2\etc\netbeans.conf, en la línea de netbeans_default_options=…

Añadir al final, antes de las comillas:

-J-Dfile.encoding=UTF-8

Supuestamente esto afecta a la JVM con la que arranca Netbeans. Buscando en Google no aparece mucho más :( .

Amén xD
No voy a hablar de los incontables problemas que ya he tenido (y aún ahora sigo teniendo) con este tema. Deberían de prohibir usar todos los sistemas de codificación salvo UTF-8 y al que no lo cumpliera se le corta una mano y tirando :D

Yo utilizo Notepad++ y codifico todos los ficheros de mi proyecto (.java, .groovy, .gsp…) en “UTF-8 sin BOM”. Jamás he tenido ningún problema con tildes y similares… ;)

@josjim, ¿qué tal Grails con Notepad++? ¿Has probado Text Mate?

Lo siento, los comentarios están cerrados.