Как хранить и извлекать HTML с правильной кодировкой? - PullRequest
2 голосов
/ 14 ноября 2011

Пожалуйста, обратите внимание, что этот вопрос эволюционировал во времени, потому что я постепенно узнал, что будет лучшим подходом для его решения. Так что теперь это скорее решение, чем вопрос: -).

Рабочий процесс

  • Я получаю HTML-страницу
  • Я храню его (файл на диске)
  • позже я получаю его, чтобы разобрать
  • на всякий случай, я использую TagSoup для решения проблем
  • Я анализирую данные как HTML

Обратите внимание, что я говорю о html-странице, поэтому информация о кодировке присутствует в заголовке (в метатеге).

Каждый шаг - это проблема, потому что в любом из них я могу ошибаться. Таким образом, вопрос заключается в том, как извлечь данные, сохранить их, извлечь их и, наконец, проанализировать (правильно - т.е. сохранить кодировку на каждом шаге)?

1 Ответ

1 голос
/ 15 ноября 2011

Сохранение

Я подумал, что безопаснее сохранять и загружать данные в двоичном виде, несмотря на то, что это текст.Таким образом, я избегаю проблем с кодированием - поэтому, за исключением парсера, я работаю только с Array [Byte].

org.apache.commons.io.FileUtils
  .writeByteArrayToFile(new File(filename),content)

Извлечение и анализ

G_H указывает наБиблиотека JSoup имеет возможность самостоятельно определять кодировку - все, что нужно сделать, это НЕ для передачи информации о кодировке.

val data = org.apache.commons.io.FileUtils
             .readFileToByteArray(new File(filename))
val doc = org.jsoup.Jsoup.parse(new java.io
             .ByteArrayInputStream(data), null,"");

Извлечение

var content : Array[Byte] = null
val client = new org.apache.http.impl.client.DefaultHttpClient();
val httpget = new org.apache.http.client.methods.HttpGet(url);

try {
  val response = client.execute(httpget);
  val entity = response.getEntity()
  content = org.apache.http.util.EntityUtils.toByteArray(entity)

}
finally {
  client.getConnectionManager().shutdown();
}

Большое спасибо G_H , JSoup стал поворотным моментом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...