В некоторых случаях сервер не выдаст вам кодировку в заголовке, но она будет записана в содержании, например, этот URL: http://seniv.dlmostil.ru/jacket/p/kupit-sportivnie-bryki-adidas-s-dostavkoy/
Когда вы выполните
ContentType contentType = ContentType.getOrDefault(entity);
Charset charSet = contentType.getCharset();
, тоcharSet равен null .
В этом случае я читаю поток и пытаюсь извлечь charSet из HTML-кода с помощью регулярного выражения, поэтому при чтении содержимого из входного потока в
ByteArrayOutputStream out = new ByteArrayOutputStream();
тогда вы можете сделать это:
String help = new String(out.toByteArray());
Pattern charSet = Pattern.compile("charset\\s*=\\s*\"?(.*?)[\";\\>]", Pattern.CASE_INSENSITIVE);
Matcher m = charSet.matcher(help);
String encoding = m.find() ? m.group(1).trim() : "UTF-8";
if (Charset.availableCharsets().get(encoding) == null) encoding = Charsets.UTF_8.toString();
String html = new String(out.toByteArray(), encoding);
Я надеюсь, вы получите представление об этом последнем выходе, когда все другие методы не будут работать.