style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

¿Como codificar o descodificar un String?

Buenas a todos!

Estoy realizando una aplicación en java en la que me bajo el código fuente de una pagina web mediante ( import java.net.URL ).

La cuestión es que tengo todo el código fuente en una variable de tipo String. Pero cuando visualizo el contenido me salen caracteres raros en las palabras que están acentuadas.

Carasterísticas

Ej. Con ISO-8859-1

caracter?sticas

Ej. Con UTF-8

caracter�sticas

NOTA : , esa es la ISO que siguen la paginas con las que trabajo, pero como veréis en el ejemplo anterior no funciona ,no se si lo hago mal o no se porque es.

Si alguien sabe como podría decirme como codificarlo o des codificarlo , le estaría muy agradecido, de todas formas si se requiere el código para que os hagáis una idea os lo pongo a continuación :

try {
// Url con la foto
URL url = new URL(
"http://www.paginaweb.html");

URLConnection urlCon = url.openConnection();

InputStream is = urlCon.getInputStream();

byte[] array = new byte[1000]; // buffer temporal de lectura.

StringBuffer out = new StringBuffer();

byte[] b = new byte[4096];
for (int n; (n = is.read(b)) != -1;) {

out.append(new String(b, 0, n));
}
String pot=new String(out.toString().getBytes("ISO-8859-1")); // UTF-8 ASCII ISO-8859-(1-10,15) ( PRUEBAS REALIZADAS )

System.out.println(""+pot);

¡ Gracias de antemano y un cordial saludo a todos/as !

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Reader

Para manejar cadenas es mejor si usas Readers en vez de Streams. En este caso que sólo puedes obtener un Stream, puedes envolverlo en un InputStreamReader. Los readers te pueden dar caracteres en vez de bytes. Me parece que tu problema es porque primero obtienes todo a un arreglo de bytes y luego creas un String con eso, pero no le indicas la codificación que quieres usar, por lo que usa la default (según tu sistema operativo), que seguramente no coincide con lo que indica la página.

En todo caso puedes sustituir tu linea:

out.append(new String(b, 0, n));

por algo como:

out.append(new String(b, 0, n, "UTF-8")); //o intenta con ISO-8859-1

Y te puedes saltar el String que creas después. El problema es que la codificación hay que hacerla al crear el String, desde la primera vez. No sirve de nada que primero hagas strings que vas pegando al StringBuffer (que debería ser un StringBuilder, si lo usas de manera interna solamente, para optimizar performance) y luego hagas un nuevo String con los bytes del que ya tienes, pero cambiando la codificación.

Gracias Ezamudio!!!

Gracias tio , me estaba rompiendo la cabeza , sabia que era algo de la codificación pero como voy aprendiendo a la vez que cada X tiempo , porque en el trabajo me hacen programar en 4 o 5 lenguajes diferentes es una movida y al final no soy experto en nada , y la mente va mezclando codigos.

De nuevo gracias.

Hasta la próxima , un saludo!

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">