Какой самый точный детектор кодирования?

После определенного опроса я пришел к выводу, что в java-мире существует несколько проектов обнаружения кодирования, если getEncoding в InputStreamReader не работает:

  1. juniversalchardet
  2. jchardet
  3. cpdetector
  4. ICU4J

Тем не менее, я действительно не знаю, что является лучшим среди всех. Может ли кто-нибудь с практическим опытом рассказать мне, какой из них лучший в Java?

Я проверил juniversalchardet и ICU4J на некоторых файлах CSV , и результаты несовместимы: у juniversalchardet были лучшие результаты:

  • UTF-8: оба обнаружены.
  • Windows-1255: juniversalchardet обнаружен, когда у него было достаточно букв на иврите, ICU4J все еще считал, что это ISO-8859-1. С еще большим количеством букв на иврите ICU4J обнаружил его как ISO-8859-8, который является другим кодированием на иврите (и поэтому текст был в порядке).
  • SHIFT_JIS (японский): обнаружен juniversalchardet, и ICU4J думал, что это ISO-8859-2.
  • ISO-8859-1: обнаружен ICU4J, не поддерживаемый juniversalchardet.

Поэтому следует рассмотреть, какие кодировки он, скорее всего, придется иметь дело. В итоге я выбрал ICU4J .

Обратите внимание, что ICU4J все еще поддерживается.

Также обратите внимание, что вы можете использовать ICU4J, и в случае, если он возвращает null, потому что это не удалось, попробуйте использовать juniversalchardet. Или наоборот.

AutoDetectReader от Apache Tika делает именно это – сначала пытается использовать HtmlEncodingDetector, затем UniversalEncodingDetector (который основан на juniversalchardet), а затем пытается Icu4jEncodingDetector (на основе ICU4J).

Я нашел ответ онлайн:

http://fredeaker.blogspot.com/2007/01/character-encoding-detection.html

Здесь сказано что-то бесценное:

Сила детектора кодирования символов заключается в том, сосредоточен ли его фокус на статистическом анализе или обнаружении prologа HTML META и XML. Если вы обрабатываете HTML-файлы с META, используйте cpdetector. В противном случае наилучшим вариантом будет либо monq.stuff.EncodingDetector, либо com.sun.syndication.io.XmlReader.

Вот почему я использую cpdetector сейчас. Я буду обновлять сообщение с результатом.

Я лично использовал jchardet в нашем проекте (juniversalchardet не был доступен тогда), чтобы проверить, был ли stream UTF-8 или нет.

Было легче интегрироваться с нашим приложением, чем другим, и давало отличные результаты.

  • Как вы эхо 4-значный символ Unicode в Bash?
  • Давайте будем гением компьютера.