Как обнаружить кодировку в Java? - PullRequest
1 голос
/ 30 марта 2012

Полгода назад я столкнулся с досадной проблемой.И все еще не мог это исправить.Проблема заключается в log4j-logging, где кодировка по умолчанию - utf 8.

Иногда я получаю сообщения с другой кодировкой, CP1252.(Там нет никакого способа изменить это).Таким образом, вход в utf8 делает текст нечитаемым.Я могу как-то исправить кодировку, и этот текст будет читабелен в журнале.

Но если я применю это "исправление кодировки" к обычному сообщению, оно будет испорчено.Мне нужно знать, действительно ли нужно это преобразование.К сожалению, у меня нет идей.

Ответы [ 2 ]

3 голосов
/ 30 марта 2012

Как прокомментировал deceze, нет надежного способа автоматически определять кодировку текста.

Большинство кодировок пытаются использовать 1 байт для символов, так как в результате одна и та же последовательность байтов означает совершенно разные строки в разных кодировках. Практически единственное, что вы можете надежно сделать, это сказать, что «это недопустимая строка UTF8», другие часто используемые кодировки даже не имеют строгих правил, какие байтовые последовательности являются / не допустимы для него.

Вам лучше всего знать кодировку сообщения. Следующим вариантом будет сохранение текста в виде байтового массива рядом с «строкой utf8».

Если у вас очень ограниченный набор кодировок для принятия (utf8 / utf16 / cp1252), вы можете попытаться использовать некоторую эвристику для обнаружения - т.е. большинство английских строк в UTF16 будут иметь 0 как любой другой байт, и вы можете попробовать посмотрите, в порядке ли строка как UTF8 - если нет - чем, вероятно, является оставшаяся кодировка.

1 голос
/ 30 марта 2012

Apache Tika включает детектор кодирования с открытым исходным кодом.

Существуют также коммерческие альтернативы.

...