@DmitryPros

Как получить кодировку сайта?

BufferedReader body = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8");
String tempLine, outString = "";
while ((tempLine = body.readLine()) != null)
     outString += tempLine + " ";
body.close();
return outString;


По умолчанию читаю поток в кодировке utf-8, но могут попасться сайты с другой кодировкой, как ее определить, если ее название не возвращается в Headers?

Пробовал писать отдельный метод и читать первую строку, извлекать название кодировки из тела документа, но в таком случае body.readLine() выводит текст не со второй строки, а из середины документа, на картинке видно, что tempLine берет инфу явно не из следующей строки:

8e1e5ab251574de8b6756c02b6996812.PNG
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
Labunsky
@Labunsky
Я есть на хабре
В тот момент, когда ты получаешь строку, она уже в любом случае хранится в джавовской UTF-16. Именно поэтому кодировка указывается для ридера до начала чтения.
С уже считанной строкой, если она была прочитана не в той кодировке и "испорчена", а кодировка все неизвестна, ничего сделать нельзя.
Для того, чтобы определить кодировку исходников сайта, который выгружаешь, нужно сначала получить его не в строковом виде, а массивом байт. После этого, можно работать с ним и уже определять кодировку либо с помощью своих костылей, либо уже существующих чужих.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AStek
@AStek
Из заголовка ответа (responce header-a).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы