Eclipse y la locura de la codificación de caracteres

07/09/2006

Eclipse Ico
Trabajo en proyectos Java utilizando Eclipse. El entorno de trabajo en la oficina del resto de desarrolladores es Windows y usamos un almacén cvs para el código fuentes. Todos utilizan Eclipse 2.1 mientras que yo uso Eclipse 3.1.2 y además en Linux (Ubuntu, para ser más exactos).

A la hora de compartir código con ellos tenía problemas con la codificación de caracteres ya que en windows por defecto es CP-152 y en Ubuntu, por defecto, es UTF-8.

Mi primer intento para solucionar el problema fué pasar el parámetro -Dfile.encoding=ISO-8859-1 al arrancar el Eclipse, con lo que establecía el juego de caracteres por defecto de la máquina virtual sobre la que se ejecuta el Eclipse a ISO-8859-1 (un superconjunto del CP-152 de Windows).

Aún así, seguía con problemas de juego de caracteres, así que decidí establecer dicha codificación por defecto en todo el sistema Linux, para ver si así se solucionaba el problema (se puede ver aquí cómo hacerlo).

Pero tampoco, de echo en ese momento empezaron a suceder “cosas extrañas”. Yo abría un archivo JavaScript en el editor del Eclipse en el que se veían ??? en vez de ¡¡¡, lo editaba poniendo ¡¡¡, lo guardaba, y al volver a abrirlo, volvían a aparecer ??? (hasta ahora si ponía ¡¡¡ siempre se veían ¡¡¡ en mi Eclipse, aunque luego se viese mal en Windows).

Dándole vueltas llegué a la conclusión de que algo raro estaba pasando, parecía que el archvio de abría utilizando un juego de caracteres y se guardaba utilizando otro distinto. Entonces fué cuando descubrí la opción Window –> Preferences –> General –> Content Types (que no existe en la versión 2.1), donde a cada tipo de archivo se le puede asociar una codificación de caracteres (además también está la Window –> Preferences –> General –> Editors, donde puedes establecer la codificación por defecto para todos los editores de texto -NOTA: esta opción ya no está disponible en Eclipse 3.2.1, solamente existe la de Content Types-). Y resulta que varias ya vienen prefijadas, entre ellas JavaScript que viene como US-ASCII. Ahí estaba el problema, poniendo ISO-8859-1 se solucionaron los problemas de incompatibilidades con mis compañeros.

30 Responses to “Eclipse y la locura de la codificación de caracteres”

  1. Joan Says:

    Oh… que bien! gracias… me he vuelto loco buscando donde estaba el problema. A mi, trabajando en PHP, todos los fitxeros q tenia como includes, sin ningun tipo de referencia a la codificación me los abría en UTF-8 aunque estavan en ISO-8859-1.

    Gracias
    joan

  2. Juan Odicio Says:

    Muchas gracias por el dato, yo había dejado de usar eclipse por que no encontraba la forma de hacer que guarde los archivos .js en UTF-8

  3. Nacho Brodin Says:

    Gracias por el apunte de la desaparición de la opción Window –> Preferences –> General –> Editors en la 3.2.1, me he vuelto loco buscandola. Por otro lado, sabia que podía cambiarse la codificación de todo el editor pero no que se pudiera hacer para cada tipo de fichero, está muy bien.

    Añadir que el poder variar la codificación es muy ventajoso ya que me permite tener mi kubuntu con UTF-8 y mantener la compatibilidad de los ficheros .java en eclipse con el CVS y el resto de mis compañeros asociando los .java con ISO-8859-1 (cuando hago un update de un fichero y en los comentarios me salen chinos me cabrea bastante).

  4. Pablo Says:

    Muchas gracias por tú aporte.

  5. A|eX Says:

    Ok, gracias por la utilísima información sobre la codificación de los caracteres. Ahora la cuestión es: ¿Cómo cambiar la configuración con la que Eclipse guarda los ficheros por defecto?
    En la ruta que describes, aparece un cuadro de dialogo con las extensiones de los archivos y la codificación por defecto, pero esta codificación (en el caso de PHP, UTF-8) es INVARIABLE. Decir que trabajo en Window$. Un saludo.

  6. juan Says:

    Mil gracias… Me he instalado el Eclipse 3.2 y me estaba desquiciando con eso. He seguido tu consejo y he conseguido recuperar los acentos.

  7. josepzin Says:

    Yo he puesto ISO-8859-15

    Si ponia solo ISO-8859-1, no me aceptaba el caracter EURO €, en cambio el ISO-8859-15 sí…

  8. McAndrew Says:

    Llevo toda la mañana para que me guarde unos archivos con caracteres como € y hasta que no he entrado aquí no he sabido sacarlo.

    Gracias

  9. gorlok Says:

    Muy buen dato. Gracias.

  10. Chronos Says:

    Muchas gracias por la información, todavía no he conseguido solucionar del todo los fallos que me dan pero es un inicio.

  11. Sir Ragnar Says:

    Gracias por salvarme. Estaba ya por cortarme las venas con una lechuga.

  12. cdoral Says:

    Gracias a todos porque yo estaba igual, desesperado con los acentos.
    Aquí os paso una expresión regular para hacer un ‘find in files’ en eclipse para buscar todos los caracteres extraños en archivos php:
    [^a-zA-Z0-9\,\.\:\=\?\¿\-\+\-\/\\\”\’\\!\%\$\(\)\;\ \n\r\t\_\&\[\]\{\}\*\|\#\@\á\é\í\ó\ú\ñ\^\`\º\Á\É\Í\Ó\Ú\Ñ]+


  13. […] en eclipse (especialmente duro cuando compartes trabajo entre equipos linux-windows), dejo este enlace al blog de Rubensa donde explica claramente como cambiarla y las diferencias entre eclipse 2.1 y […]

  14. Jero Says:

    Muchísimas gracias tío. Nos ha traído ésto de cabeza…. Si te conociera te habrías ganado una copa,jeje!. Un saludo

  15. Angie Says:

    Excelente lo del encoding con eclipse, me solucionaste un problema cuando creaba archivos pdf

  16. Yunior Says:

    Hola, que puedo hacer para que el eclipse en linux me reconozca los nombres de las clases con tildes??

  17. jose luis Says:

    Gracias, me acabas de ahorrar un tiempo precioso😉

  18. DON PITYLA Says:

    Hay una que me sirvió para el problema de la compilación de la jvm, el problema lo solucioné en eclipse v3.2 así:

    Windows—preferences

    Luego:
    java—Installed JREs

    Luego: Seleccionás tu JRE y presionás “editar”, y en “Default VM arguments” ingresas tu encoding, que en mi caso fué -Dfile.encoding=cp1252

    Que les sea leve.

    Don Pityla

    http://music.geocities.jp/donpitylaclub/

  19. Antonio Says:

    Gracias por el consejo, aunque a mí no me sirvió de nada, pues me encontré con que los tipos venían como Locked (bloqueados) en ese menú.

    Os dejo aquí otra solución para este problema, que se aplica sólo para los ficheros de un proyecto concreto en el que estemos trabajando: Haced clic con el botón derecho en el proyecto, y elegid “Propiedades”. Una vez allí, hay un par de apartados, “Text file encoding” y “New text file line delimiter” que son muy apañaos😀

  20. Samuel Says:

    Huy gracias por la información, ya pensaba volver al windows por la incompatibilidad…

  21. jenkin Says:

    Muchas gracias. Tenía exactamente el mismo problema que tu. He traspasado mi sistema de windows a Linux y me tenido problemas con la codificación.

  22. FancyPeople Says:

    La migración de la BBDD de una aplicación desde un encoding ISO-8859-1 a otra con enconding UTF-8 puede presentar problemas durante el proceso de import debido al tratamiento que el encoding UTF-8 realiza de los campos CHAR, VARCHAR y VARCHAR2.

    El origen de los problemas viene provocado por que en ISO-8859-1 cualquier carácter (normales, acentuados, ñ, etc…) ocupa 1 byte mientras que en UTF-8, los caracteres “especiales” ocupan más de 1 byte.

    Para evitar este problma es necesario especificar los campos CHAR, VARCHAR y VARCHAR2 con el atributo CHAR ya que de esta manera se consigue desligar a los datos del encoding de la BBDD en la que resida. En caso contrario ORACLE asumirá por defecto que el tamaño implica “bytes” y como consecuencia un encoding UTF-8 producirá problemas al manejar caracteres especiales.

    Por otro lado, la realización de este cambio deja en manos de ORACLE la decisión sobre el tamaño físico de datos a emplear de forma que, en el caso que los VARCHAR que no contengan caracteres extraños su tamaño coincidirá exactamente al tamaño en bytes en TS pero, un campo que contenga uno (o más) caracteres especial, verá incrementado el espacio empleado en disco de forma proporcional. En este caso, ORACLE recomienda considerar un incremento de un 15% sobre el espacio de disco ocupado en la versión ISO.

  23. Xavi Says:

    No suelo dejar comentarios en blogs de desconocidos….. pero GRACIAAAAAAAAAAAASSS!!!

  24. cgs Says:

    GRACIAS 4 años y medio después🙂
    Funciona como un reloj.

  25. Nacho Says:

    Oleee, me estaba volviendo loco y por fin puedo javear en Ubuntu! Muchas gracias por el aporte


  26. Hey, muchas gracias por el aporte, me estaba volviendo loco al trabajar con GWT!!! Saludos y mucha suerte!!!

  27. jabm1127 Says:

    Que gran aporte, me sirvio muchisimo!! Gracias.

  28. Julio Says:

    Muchas Gracias. Diste en el clavo con la solucion del problema.
    Otro obstaculo menos para usar Linux.

    Saludos


  29. […] El Blog de rubensa: Eclipse y la locura de la codificación de caracteres GA_googleAddAttr("AdOpt", "1"); GA_googleAddAttr("Origin", "other"); GA_googleAddAttr("theme_bg", "ffffff"); GA_googleAddAttr("theme_text", "333333"); GA_googleAddAttr("theme_link", "0066cc"); GA_googleAddAttr("theme_border", "f2f7fc"); GA_googleAddAttr("theme_url", "ff4b33"); GA_googleAddAttr("LangId", "19"); GA_googleAddAttr("Tag", "eclipse"); GA_googleFillSlot("wpcom_sharethrough"); Me gusta:LikeSé el primero en decir que te gusta esta post. […]

  30. jsanmarb Says:

    Hola a todos.

    Lo que yo hice fue: En Eclipse, ir a Window –> Preferences –> General –> Workspaces y allí en Text file encoding seleccioné Other: ISO-8859-1. Luego aplicar y aceptar.

    Esto usando Eclipse Juno sobre Ubuntu 12.04.

    Saludos.


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: