В данном случае это не проблема кодировки символов, а проблема кодирования контента; вы ожидаете текст, но сервер использует сжатие для экономии пропускной способности. Если вы посмотрите на заголовки, когда получаете этот URL, вы увидите, что сервер, к которому вы подключаетесь, возвращает сжатый контент:
GET /0.8/questions/2886661 HTTP/1.1
Host: api.stackoverflow.com
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 22 May 2010 15:51:34 GMT
Content-Type: application/json; charset=utf-8
<more headers>
Content-Encoding: gzip
<more headers>
Так что вам нужно либо использовать более умного клиента, такого как HttpClient от Apache, как предлагает stevedbrown (хотя вам нужно твик, чтобы он автоматически говорил Gzip ), либо явно распаковать поток, полученный в вашем примере кода , Попробуйте это вместо строки, в которой вы объявляете свой ввод:
BufferedReader in = new BufferedReader(new InputStreamReader(new GZIPInputStream(url.openStream())));
Я убедился, что это работает для URL, который вы пытаетесь получить.