2010-02-12 4 views
7

Кто-нибудь знает, есть ли простой способ обнаружить кодировку набора символов в Java? Мне кажется, что некоторые программы имеют возможность определять, какой символ задает данный фрагмент данных, или, по крайней мере, сделать аппроксимацию.Как определить кодировку набора символов в Java?

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

Любые идеи?

+0

В чем мы говорим? Байт-массив (двоичный) или массив символов (String)? Какие из них вы хотели бы отличить тогда? Это может быть сделано только для кодировок Unicode (с байтовыми байтами), но не для надежности других. – BalusC

+1

Это может быть сложно. На этом сайте pfarland использует некоторые эвристики: http://forums.sun.com/thread.jspa?threadID=279203#3 – mre

+1

Связанные темы: http://stackoverflow.com/questions/499010/java-how-to -determine-the-correct-charset-encoding-of-a-stream и http://stackoverflow.com/questions/1888189/java-readers-and-encodings – BalusC

ответ

-3

Для определения того, находятся ли данные в любом формате Юникода (UTF-8, UTF-16 ... и т. Д.), Вы можете считывать данные в потоке байтов и проверять первые 4 байта (размер спецификации) и для каждой кодировки будет отличаться

для например:

для UTF-8 первых 3 байта будет EF, BB, BF

отличных юникод кодировок кодировок я не уверен ...

+4

Дополнительная спецификация UTF-8 полезна только тогда, когда она присутствует : http://en.wikipedia.org/wiki/Byte_order_mark – trashgod

+0

@sreejith .. вышеупомянутое решение BOM можно использовать только для указания, что файл не является UTF-8 (в этом случае он не будет начинаться с данной спецификации). Но если BOM присутствует, это может быть либо UTF-8, либо нет. Напр. возможно, для некоторого другого файла начальные байты «EF, BB, BF» - фактически действительные данные.! –

1

Взгляните на jchardet, библиотека, перенесенная из браузера Mozilla, которая специализируется на «угадывании» кодировки документа.

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

Смежные вопросы