Foros del Web » Programación para mayores de 30 ;) » Java »

Codificacion en Java

Estas en el tema de Codificacion en Java en el foro de Java en Foros del Web. Hola, ¿Qué codificación tiene por defecto Java?¿UTF-8 ó ISO-8859-1? Y la otra pregunta es, ¿como puedo cambiar de una codificación a otra? Es que tengo ...
  #1 (permalink)  
Antiguo 13/09/2007, 05:30
 
Fecha de Ingreso: agosto-2007
Mensajes: 63
Antigüedad: 16 años, 8 meses
Puntos: 0
Codificacion en Java

Hola,

¿Qué codificación tiene por defecto Java?¿UTF-8 ó ISO-8859-1?

Y la otra pregunta es, ¿como puedo cambiar de una codificación a otra?

Es que tengo problemas con los acentos debido a la codificación.

Muchas gracias.
  #2 (permalink)  
Antiguo 13/09/2007, 06:59
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Codificacion en Java

Java trabaja con UTF-16, por lo que deberías guardar el texto en UTF-8 o UTF-16.


Saludos.
  #3 (permalink)  
Antiguo 13/09/2007, 08:00
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Codificacion en Java

Ummm, en el tema de la codificación hay muchos factores a tener en cuenta, y hay que tener en cuenta todo lo que se comunica.

¿Exactamente cual es el problema que tienes? Lo más típicos son que al escribir una pagina HTML te salgan mal escritos los caracteres no ASCII, o que al recibir los datos de un formulario, se reciban mal los caracteres no ASCII. Eso es lo más tipico.

S!
  #4 (permalink)  
Antiguo 13/09/2007, 09:17
 
Fecha de Ingreso: agosto-2007
Mensajes: 63
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Codificacion en Java

Hola,

Mi problema exactamente es que al recibir unos datos en Java desde XML-RPC no me coge los acentos y entonces no me salen los resultados. En la consola de Java me sale esto:

[Fatal Error] :95:32: Invalid byte 2 of 2-byte UTF-8 sequence.

¿Quiere decir entonces que Java esta codificado en UTF-8? Es uue no entiendo bien el error.

Yo trabajo con Eclipse y no estoy seguro donde cambiar la codificacion.Yo la he cambiado en Window-Preferences-General-Content Types y luego en Java Source File he puesto UTF-8.

¿Es asi?

Gracias
  #5 (permalink)  
Antiguo 13/09/2007, 13:20
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Codificacion en Java

Lo que quiere decir es que estas recibiendo un XML que se supone está codificado en UTF-8 pero en realidad esta mal codificado y seguramente te lo estan enviando como ISO-88591.

Por ejemplo, un documento XML declarado como UTF-8 (o sin declarar ya que es la codificacion por defecto) que tenga acentos en el texto está mal.

S!

PD: El problema no es tu codigo, es el texto que estas recibiendo por XML-RPC.
  #6 (permalink)  
Antiguo 14/09/2007, 01:37
 
Fecha de Ingreso: agosto-2007
Mensajes: 63
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Codificacion en Java

Gracias por la ayuda aunque cada vez me surge alguna duda mas.

En PHP (Servidor) tengo declarada esta linea para la creacion de la cabecera del XML.

<?xml version="1.0" encoding="utf-8"?>

¿Es esto suficiente para que la codificacion del XML sea UTF-8?
Luego en Eclipse he puesto que la codificacion del codigo fuente de Java sea en UTF-8.

Los datos que yo recibo en Java con XML-RPC son estos:

<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value><array>
<data>
<value><struct>
<member><name>nombre</name>
<value><string>HOTEL ANTÓN</string></value>
</member>
<member><name>direccion</name>
<value><string>HOTEL ANTÓN</string></value>
</member>
<member><name>codigo_postal</name>
<value><string>50619</string></value>
</member>
<member><name>zona</name>
<value><int>1</int></value>
</member>
<member><name>poblacion</name>
<value><int>1</int></value>
</member>
</struct></value>
</data>
</array></value>
</param>
</params>
</methodResponse>

Aunque todavia tengo el siguiente error:
org.xml.sax.SAXParseException: Invalid byte 2 of 2-byte UTF-8 sequence.

Gracias.
  #7 (permalink)  
Antiguo 14/09/2007, 02:02
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Codificacion en Java

Exacto, el problema es que tu estás diciendo que el documento XML está codificado en UTF-8 cuando no en realidad es cierto (el acento en ANTÓN por ejemplo).
Poner la cabecera a UTF-8 no hace nada, es solo una declaración, asi que te quedan dos opciones.

1.- Declaras correctamente la codificacion del XML: Deberias ponerle
Código:
<?xml version='1.0' encoding='iso-8859-1'?>
2.- Codificas correctamente el texto para que sea UTF-8. Ello implica codificar los caracteres no ASCII siguiendo una tabla como esta ->
http://www.tony-franks.co.uk/UTF-8.htm Por ejemplo, ANTÓN sería ANT$#211;N, sustituyendo el $ por un & (si lo pongo me lo interpreta el foro). En vez de hacerlo uno a uno se puede usar un algoritmo que hay para ello, que se explica aqui: http://www1.tip.nl/~t876506/utf8tbl.html

S!
  #8 (permalink)  
Antiguo 14/09/2007, 02:22
 
Fecha de Ingreso: agosto-2007
Mensajes: 63
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Codificacion en Java

Hola,

Entonces veo que la forma mas fácil es la de poner en la cabecera del xml esta linea

<?xml version='1.0' encoding='iso-8859-1'?>

y luego cambiar la codificacion de Java en el Eclipse a iso-8859-1.

¿Es así como podría leer bien los acentos?

Esta tema de la codificación es un tema bastante complejo para los iniciados en el tema.

Gracias
  #9 (permalink)  
Antiguo 14/09/2007, 02:35
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Codificacion en Java

La codificación de Java no afecta para nada. Es la codificación del XML lo que cuenta. La idea es que cada texto, XML, Java, Stream que viaja por la red, tiene una codificación y mientras esten todas bien especificadas, todo funciona ya que las conversiones se hacen automaticas. El problema es cuando alguna especificacion es incorrecta o no se hacen las conversiones como toca.

Pero tener tu codigo Java en UTF-8 o ISO solo afecta a tu programa Java.

Así que si le pones que el XML es de ese tipo, ya debería funcionar. A no ser que en algun sitio le tengas puesto que lo que recibes es UTF-8, lo cual no será cierto ya.

S!

Y si, es un tema complejo, no solo para iniciados . Yo todavía tengo que pensarmelo 3 o 4 veces y aun asi a veces me olvido alguna codificacion y zas. Pero al menos sabiendo como va el tema, se reconocen los errores más rapido y encuentras soluciones antes. Eso si, los bugs en los navegadores tampoco ayudan mucho .
  #10 (permalink)  
Antiguo 14/09/2007, 03:17
 
Fecha de Ingreso: agosto-2007
Mensajes: 63
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Codificacion en Java

Hola,

Muchisimas gracias pero hay forma de que lo haga funcionar.

Ya he puesto la linea de codificacion iso-8859-1 en el xml:

<?xml version="1.0" encoding="iso-8859-1"?>

Ahora, como me has comentando, para los archivos Java lo he dejado como estaba y he cambiado en Eclipse para los XML files la etiqueta Encoding y he puesto ISO-Latin-1, que me imagino que debe corresponder con la iso-8859-1 porque esa codificacion no estaba en la lista.

Aun asi me sale el mismo error de Invalid byte 2 of 2-byte UTF-8 sequence.

Y una duda que me entra porque no me aclaro bien.¿Porque ponga la codificacion que ponga siempre sale el error ese de UTF-8?

Gracias
  #11 (permalink)  
Antiguo 14/09/2007, 03:32
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Codificacion en Java

¿El XML que te llega sigue siendo el mismo?
Código:
<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value><array>
<data>
<value><struct>
<member><name>nombre</name>
<value><string>HOTEL ANTÓN</string></value>
</member>
<member><name>direccion</name>
<value><string>HOTEL ANTÓN</string></value>
</member>
<member><name>codigo_postal</name>
<value><string>50619</string></value>
</member>
<member><name>zona</name>
<value><int>1</int></value>
</member>
<member><name>poblacion</name>
<value><int>1</int></value>
</member>
</struct></value>
</data>
</array></value>
</param>
</params>
</methodResponse>
¿?
  #12 (permalink)  
Antiguo 14/09/2007, 03:47
 
Fecha de Ingreso: agosto-2007
Mensajes: 63
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Codificacion en Java

Si, es exactamente el mismo.
  #13 (permalink)  
Antiguo 14/09/2007, 05:29
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Codificacion en Java

Lo que tienes que conseguir es que el que te llegue sea así:

Código:
<?xml version="1.0" encoding="iso-8859-1"?>
<methodResponse>
<params>
<param>
<value><array>
<data>
<value><struct>
<member><name>nombre</name>
<value><string>HOTEL ANTÓN</string></value>
</member>
<member><name>direccion</name>
<value><string>HOTEL ANTÓN</string></value>
</member>
<member><name>codigo_postal</name>
<value><string>50619</string></value>
</member>
<member><name>zona</name>
<value><int>1</int></value>
</member>
<member><name>poblacion</name>
<value><int>1</int></value>
</member>
</struct></value>
</data>
</array></value>
</param>
</params>
</methodResponse>
Mientras te llegue el encoding sin especificar y el acento ese en ANTÓN, te dara error, por que además es un error. El programa que genera el XML que recibes lo hace mal.

S!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:43.