Если я реализую обработчик файлов UTF-16, сможет ли он точно обработать все остальные кодировки - PullRequest
2 голосов
/ 06 декабря 2010

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

new BufferedReader(
    new InputStreamReader(
        new FileInputStream(file), UTF16));

и обработчик сможет прочитать все возможные кодировки (точным образом), которые могут иметь файлы (моя идея UTF16 обратно совместим со всеми другими кодировками).Мне придется иметь дело со следующими кодировками.

charset=iso-8859-1
charset=utf-8
charset=iso-8859-1
charset=iso-8859-15'
charset="UTF-8"
charset=windows-1252
charset=utf-16

Спасибо.Любое предложение будет высоко оценено.

Ответы [ 3 ]

3 голосов
/ 06 декабря 2010

Нет, UTF-16 определенно не совместим со всеми другими кодировками (в том смысле, что вы не можете использовать декодер UTF-16 для декодирования любого старого текста).Попробуйте использовать его для UTF-8, ISO-Latin-1 или для любого другого числа кодировок, и он потерпит неудачу.

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

2 голосов
/ 06 декабря 2010

Нет UTF16 может понимать только файлы, закодированные в UTF16.Лучше всего определить кодировку перед обработкой файла.Используйте библиотеку GuessEncoding для определения кодировки, а затем создайте считыватель в обнаруженной кодировке.

Я бы использовал это в сочетании с предложением Джона Скита

1 голос
/ 06 декабря 2010

Ничего себе.Просто вау.

Единственный способ сделать это - прочитать первые несколько сотен байтов в безопасной кодировке, такой как Windows-1252, и найти NULLS, которые обозначают UTF-16/32 и тег кодировки META.

В противном случае посмотрите на заголовки для набора символов.

Если заголовок не найден, предположите UTF-8 (стандартный), если он не анализируется, затем предположите Windows-1252 (распространенная ошибкаотправка Windows-1252 без заголовка кодировки).

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