2011-12-23 4 views
1

Я имею дело с данными, которые были отобраны с использованием Java HtmlUnit. Веб-страница использовала кодировку Windows-1252, но ответ был получен, как если бы страница была закодирована как UTF-8 (т. Е. Когда была вызвана функция getContentAsString в объекте HtmlUnit WebResponse, была указана кодировка UTF-8, а не отсрочка на кодировку, указанную на сервере ответ). Есть ли способ отменить этот процесс, чтобы восстановить исходные данные Windows-1252 из некорректно помеченных символов UTF-8?Восстановление символов Windows-1252 из некорректно сохраненных данных как UTF-8

Большинство других вопросов по этой теме посвящено определению типа файла или преобразованию из одного типа потока в другой для символов, правильно кодированных в первую очередь. Это не так. Я не считаю, что утилиты, такие как iconv, будут работать, потому что они ожидают, что потоки будут правильно сохранены в исходной кодировке для начала.

ответ

3

Наверное, нет. Если текст с кодировкой Windows-1252 ошибочно принят за UTF-8, все кодовые точки, отличные от ASCII, будут повреждены из-за того, что UTF-8 имеет дело с этими кодовыми точками. Только если вам очень повезло, и все кодовые точки, отличные от ASCII, попадают в пары или триплеты, которые, по чистой случайности, преобразуются в реальные кодовые страницы Unicode, вы можете отменить этот процесс.

Но вы в значительной степени не повезло.

+1

Это будет зависеть от того, как хранятся поврежденные коды. У меня нет опыта работы с HtmlUnit, но я бы хотел увидеть какой-то шестнадцатеричный дамп результата, прежде чем я сделаю вывод, что это невозможно. –

+0

Это может быть невозможно. Если объект, ответственный за декодирование * (предполагаемого) * utf-8, является изворотливым, он может содержать неисправные кодовые точки utf-8 «как есть» двоично, но это будет очень плохой декодер. Я предполагаю, что результат полон ящиков или вопросительных знаков ... –

+0

HtmlUnit использует кодировку Java и не делает ничего особенного (в отличие от icu4j). Поэтому искажение набора символов будет зависеть от злобности библиотек rt Java, которые я ожидаю, очень прочные. Если у кого-то есть дополнительные предложения, учитывая эту информацию, это будет очень признательно. – benmac