Как нормализовать текстовое содержимое в UTF 8 в Java - PullRequest
1 голос
/ 16 марта 2010

У нас есть CMS с несколькими тысячами текстовых / html-файлов. Оказывается, пользователи загружали текстовые / html-файлы, используя различные кодировки символов (utf-8, utf-8 w BOM, windows 1252, iso-8859-1).

Когда эти файлы считываются и записываются в ответ, наша структура CMS выдает кодировку = UTF-8 для атрибута content-type ответа.

Из-за этого любой контент, не относящийся к UTF-8, отображается пользователю с искаженными символами (?, Черные бриллианты и т. Д., Когда нет правильного перевода символов из "родной" кодировки символов в UTF-8). Кроме того, к этим документам не прикреплены метаданные, обозначающие кодировку. Насколько мне известно, единственный способ узнать, что это за кодировка, это посмотреть на них в приложении для визуализации текста (Firefox, Notepadd ++ и т. "на содержание, чтобы увидеть, если оно" выглядит "правильно.

Кто-нибудь знает, как автоматически / интеллектуально конвертировать файлы неизвестной кодировки в UTF-8? Я читал, что это может быть достигнуто с помощью статистического моделирования, но это то, что у меня над головой.

Мысли о том, как лучше всего подойти к проблеме?

Спасибо

Ответы [ 3 ]

3 голосов
/ 16 марта 2010

Вы можете использовать ICU4J CharsetDetector

1 голос
/ 16 марта 2010

Попробуйте расшифровать его как UTF-8. Если это не удается, ищите \x92 и декодируйте как CP1252, если найдено. В противном случае расшифруйте как Latin-1.

0 голосов
/ 17 марта 2010

В общем, сказать невозможно. Последовательность байтов 63 61 66 C3 A9 одинаково действительна как «café» в windows-1252, «caf" »в IBM437 или« café »в UTF-8. Последнее статистически более вероятно, однако.

Если вы не хотите иметь дело со статистическими методами, подход, который работает большую часть времени, состоит в том, чтобы предположить, что все, что выглядит как UTF-8, и что все остальное в windows-1252.

Или, если UTF-16 возможен, ищите FE FF или FF FE в начале файла.

...