Estoy tratando de leer una cadena JSON:

{
  "also_known_as": [
    "Сильвестр Сталлоне"
  ],

  "birthday": "1946-07-06",
  "deathday": "",
}

a través de HTTP.

Tengo el siguiente código:

URL url = new URL("url");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Accept-Charset", "UTF-8");//connection.setRequestProperty("Accept-Charset", "ISO-8859-1");
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line = "";
StringWriter writer = new StringWriter();
while((line=reader.readLine())!=null){
    writer.write(line);
}
reader.close();
writer.close();     
connection.disconnect();
System.out.println(writer.toString());

Pero es la impresión de la cadena en la consola:

{
  "also_known_as": [
    "СильвеÑ?Ñ‚Ñ€ Сталлоне"
  ],

  "birthday": "1946-07-06",
  "deathday": "",
}

También he probado:

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));//BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "ISO-8859-1"));

Pero no hubo suerte.

Mi pregunta es ¿cómo puedo configurar la codificación de caracteres de la URLConnection?

Cualquier información será muy útil para mí.

Se refiere.


El uso de Apache IOUtils he intentado esto:

StringWriter writer = new StringWriter();
IOUtils.copy(connection.getInputStream(), writer, "UTF-8");

Pero es la impresión mismo resultado en la consola de eclipse.


El Uso De Apache HttpClient:

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet getRequest = new HttpGet("http://api.themoviedb.org/3/person/16483?api_key=23e89da030a0ee8b25aaed20950a0c25");
getRequest.addHeader("accept", "application/json");
HttpResponse response = httpClient.execute(getRequest);
StringWriter writer = new StringWriter();
IOUtils.copy(response.getEntity().getContent(), writer, "UTF-8");
System.out.println(writer.toString());

mismo resultado.

  • usted tiene que codificar clases bufferedreader o StringWriter con el juego de Caracteres apropiado
  • He tratado de usar IOUtils. He editado mi respuesta. Pero se está dando el mismo resultado demasiado. 🙁
  • Está usted seguro de que no es que la consola del juego de caracteres está mal ajustado?
  • no hay problema común que sistema operativo Windows bastante complicado las cosas simples, usted tiene que buscar para Charset o Windows EncodePage para Cyrilic tipos String my String = new String(reader.toByteArray(), charEncoding);
  • La Codificación de la consola de eclipse se configura por Defecto hereditario (Cp1252), he cambiado a UTF-8, ahora se imprimen correctamente. Gracias.
InformationsquelleAutor Tapas Bose | 2012-03-03

2 Comentarios

  1. 5

    Sólo en poner mi comentario en una respuesta, la cual resultó ser la causa: la consola del juego de caracteres se Cp1252, por lo que el resultado era correcto, pero que se muestra incorrectamente.

    • Hoy en día la UE multó a Microsoft 500 Millones de EUROS por no ofrecer un navegador diferente. Esto es injusto, en mi humilde opinión. Lo que sería justo: Multa de ellas más de 500 Millones de EUROS cada día esta maldita y absolutamente inútil, no estándar CP1252 es establecido como estándar de codificación, y no hay manera de cambiar eso!
  2. 1

    Hacer que:

    new InputStreamReader(connection.getInputStream(), new Charset("UTF-8"))

    es decir, especificar que el conjunto de caracteres.

    • Lo que está mal. Usted tiene que examinar el encabezado HTTP para el juego de caracteres. Usted no puede asumir UTF-8.
    • Bien, sí. En ese caso connection.getContentType() y analizar.
    • desafortunadamente, muchos de los sitios web no se preocupan para especificar el juego de caracteres correctamente. ¿Cuál sería la norma en estos casos?
    • De acuerdo a la HTTP 1.1 especificaciones el conjunto de caracteres predeterminado para «texto» tipos de contenido MIME recibido a través de HTTP es ISO-8859-1.

Dejar respuesta

Please enter your comment!
Please enter your name here