Для файлов с плоскими символами любое обнаружение кодирования должно опираться на статистику и эвристику (например, наличие BOM или частоту символов / шаблонов), поскольку существуют последовательности байтов, которые будут допустимы более одной кодировки, но отображаются на разные символы.
XML обнаружение кодирования должно быть более простым, но, безусловно, возможно создать неоднозначно закодированный XML (например, исключив кодировку в заголовке).
Возможно, имеет смысл использовать API обнаружения кодирования для указания вероятности ошибки пользователю, а не полагаться на них в качестве лиц, принимающих решения.
Когда вы преобразуете данные из byte
s в char
s в Java, вы транскодируете из кодирования X в UTF-16 (BE). То, что отправляется в вашу базу данных, зависит от вашей базы данных, ее драйвера JDBC и от того, как вы настроили столбец. Это, вероятно, включает в себя перекодирование из UTF-16 во что-то еще. Предполагая, что вы не изменяете базу данных, существующие символьные данные должны быть в безопасности; у вас могут возникнуть проблемы, если вы собираетесь анализировать BLOB-объекты. Если вы уже проанализировали файлы, написанные в разрозненных кодировках, но рассматривали их как другую кодировку, повреждение уже произошло - нет серебряных пуль, чтобы это исправить. Если вам нужно изменить набор символов базы данных с «ANSI» на Unicode, это может привести к болезненному .
Принятие Unicode , где это возможно, хорошая идея. Это может быть невозможным, но предпочитайте форматы файлов, в которых вы можете сделать кодировку однозначной - такие вещи, как XML (что делает его простым) или JSON (который требует UTF-8).