Descartar los caracteres no imprimibles devueltos en la respuesta XML del servidor

Al intentar usar la API de Bing para buscar, obtengo caracteres que no se pueden imprimir y no parecen contener información adicional. El objetivo es guardar la respuesta XML (UTF-8) como un archivo de texto para analizarlo más tarde.

Mi código actualmente se parece a esto:

    URL url = new URL(queryURL);

    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
    BufferedWriter out = new BufferedWriter(new FileWriter(query+"-"+saveResultAs));
    String str = in.readLine();
    out.write(str);

    in.close();
    out.close();

Cuando envío el contenido de 'str' a la consola, se ve así:

texto alternativo

y aquí está el aspecto del archivo XML local recién creado:

texto alternativo

¿Qué debo hacer para convertir el texto UTF-8 para que str no tenga los caracteres adicionales?

preguntado el 09 de enero de 11 a las 08:01

eso es un error de transcodificación; use un analizador XML o detecte la codificación antes de decodificar a una cadena: w3.org/TR/REC-xml/#sec-guessing Supongo que necesita una cadena; si solo desea guardar el archivo localmente, lea y escriba bytes. -

@McDowell Terminé leyendo y escribiendo bytes directamente en el archivo. El uso de String fue una limitación autoimpuesta. ¡Gracias! -

2 Respuestas

Si conoce de antemano la codificación, debe

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));

Y lo mismo con el escritor ... en su ejemplo, después de escribir, su archivo está codificado en la plataforma predeterminada, sin dejar de declarar que es UTF-8.

Puede ser conveniente leer la codificación de la declaración XML para evitar sorpresas.

Si solo desea almacenar los datos para su uso posterior, no tiene sentido codificar / decodificar de todos modos. Simplemente lea los bytes y escríbalos. Mantenga la tarea de detectar la codificación del analizador XML.

Respondido el 09 de enero de 11 a las 17:01

proporcionar InputStreamReader con el "UTF-8" me ayudó a seguir el camino correcto. ¡Gracias! - Penang

El analizador XML manejará la codificación / decodificación, y se le enviarán los caracteres apropiados (por ejemplo, un analizador SAX hará esto a través del characters() devolución de llamada del método). Todo lo que necesita hacer es almacenarlo en un archivo adecuado (tal vez con un Marca de orden de bytes?)

Respondido el 09 de enero de 11 a las 15:01

Mantendré esta sugerencia en mente, pero actualmente mi tarea es solo guardar el archivo localmente. ¡Gracias! - Penang

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.