Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Java (http://www.forosdelweb.com/f45/)
-   -   Codificacion en Java (http://www.forosdelweb.com/f45/codificacion-java-518900/)

luisicozgz 13/09/2007 05:30

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.

AlvaroG 13/09/2007 06:59

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


Saludos.

GreenEyed 13/09/2007 08:00

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!

luisicozgz 13/09/2007 09:17

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

GreenEyed 13/09/2007 13:20

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.

luisicozgz 14/09/2007 01:37

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.

GreenEyed 14/09/2007 02:02

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!

luisicozgz 14/09/2007 02:22

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

GreenEyed 14/09/2007 02:35

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 :-(.

luisicozgz 14/09/2007 03:17

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

GreenEyed 14/09/2007 03:32

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>

¿?

luisicozgz 14/09/2007 03:47

Re: Codificacion en Java
 
Si, es exactamente el mismo.

GreenEyed 14/09/2007 05:29

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!


La zona horaria es GMT -6. Ahora son las 19:38.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.