как я могу определить кодировку веб-страницы - PullRequest
1 голос
/ 26 декабря 2011

Я просто хочу получить исходный код веб-страницы на языке Java, и я просто хочу получить этот контент с правильным типом кодировки. Я могу получить содержимое веб-страницы до сих пор. Но для некоторых веб-страниц контент содержит нелепые символы. Поэтому мне нужно определить кодировку этой веб-страницы.

Согласно моим небольшим исследованиям, я обнаружил, что для этого есть библиотека jChardet. Но я не смог импортировать его в свой проект. Может кто-нибудь помочь мне?

Кстати, код ниже - это код для чтения содержимого веб-страницы

  StringBuilder builder = new StringBuilder(); 
  InputStream is = fURL.openStream();
  BufferedReader buffer = null;
  buffer = new BufferedReader(new InputStreamReader(is, encodingType));

  int byteRead;
  while ((byteRead = buffer.read()) != -1) {
    builder.append((char) byteRead);
  }
  buffer.close();  

  return builder;

Ответы [ 3 ]

4 голосов
/ 26 декабря 2011

Прочитайте заголовок Content-Type ответа HTTP, это лучший способ получить кодировку. Применяйте догадки только тогда, когда у вас нет альтернативы - вы делаете.

1 голос
/ 31 октября 2014

Вы также можете использовать http://jchardet.sourceforge.net/

private static String detectCharset(byte[] body) {
        nsDetector det = new nsDetector(nsPSMDetector.ALL);



        det.Init(new nsICharsetDetectionObserver() {

            public void Notify(String charset) {
                HtmlCharsetDetector.found = true;
            }
        });

        boolean done = false;
        boolean isAscii = true;

        if (isAscii) {
            isAscii = det.isAscii(body, body.length);
        }

        // DoIt if non-ascii and not done yet.
        if (!isAscii && !done) {
            done = det.DoIt(body, body.length, false);
        }

        return det.getProbableCharsets()[0];

    }
0 голосов
/ 27 декабря 2011

Как минимум, вам необходимо прочитать и проанализировать заголовки HTTP, чтобы увидеть, объявляют ли они кодировку в заголовках HTTP, и, при отсутствии такого объявления (довольно распространенного), проанализировать сам документ, чтобы найти тег meta который объявляет кодировку. Для документов XHTML вам необходимо проверить декларацию XML и по умолчанию использовать utf-8. Это все равно оставило бы значительное количество страниц с необъявленной кодировкой, поэтому потребуется некоторая эвристика. Вы можете проверить раздел о кодировках в черновике HTML5, который также содержит некоторые эвристические переопределения (например, обрабатывать iso-8859-1 как windows-1252).

...