Кодировка символов URLConnection - PullRequest
4 голосов
/ 03 марта 2012

Я пытаюсь прочитать строку JSON:

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

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

по HTTP.

У меня есть следующий код:

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());

Но это вывод строки в консоли:

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

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

Я также пробовал:

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

Но не повезло.

У меня вопрос: как установить кодировку символов URLConnection?

Любая информация будет очень полезна для меня.

С уважением.


Используя Apache IOUtils, я попробовал это:

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

Но выводит тот же результат в консоли затмения.


Использование 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());

тот же результат.

Ответы [ 2 ]

5 голосов
/ 04 марта 2012

Просто выдвинул мой комментарий в ответ, который оказался причиной: набор символов консоли был Cp1252, поэтому вывод был правильным, но отображался некорректно.

1 голос
/ 04 марта 2012

Сделать так:

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

т.е. указать эту кодировку.

...