Это, вероятно, непосредственная причина вашей проблемы, и определенно ошибка:
builder.append(new String(tmp), 0, read-1);
Когда вы вызываете один из конструкторов new String(byte[])
, который не использует Charset, он использует кодировку платформы по умолчанию. Очевидно, кодировка по умолчанию на вашей платформе не ISO-8859-1. Вы должны быть в состоянии получить имя кодировки из заголовков ответа, чтобы вы могли предоставить его конструктору.
Но вам все равно не следует использовать конструктор String; правильный способ - использовать InputStreamReader. Если бы кодирование было одним из многобайтовых, таких как UTF-8, вы могли бы легко повредить данные, потому что кусок байтов заканчивался в середине символа.
В любом случае, никогда, ever не используйте конструктор new String(byte[])
или String.getBytes()
, который не принимает параметр Charset. Эти методы не рекомендуется использовать и должны выдавать яростные предупреждения, когда кто-либо их использует.