Моя программа должна читать файлы, которые используют различные кодировки. Они могут быть ANSI, UTF-8 или UTF-16 (с прямым или прямым порядком байтов).
Когда есть спецификация (метка порядка байтов), у меня нет проблем. Я знаю, является ли файл UTF-8 или UTF-16 BE или LE.
Я хотел предположить, когда не было спецификации, что файл был ANSI. Но я обнаружил, что в файлах, с которыми я имею дело, часто отсутствует спецификация. Поэтому никакая спецификация не может означать, что файл является ANSI, UTF-8, UTF-16 BE или LE.
Когда файл не имеет спецификации, каков будет лучший способ отсканировать часть файла и наиболее точно угадать тип кодировки? Я хотел бы быть ближе к 100% времени, если файл в формате ANSI, и в верхние 90-е, если это формат UTF.
Я ищу общий алгоритмический способ определить это. Но на самом деле я использую Delphi 2009, который знает Unicode и имеет класс TEncoding, поэтому что-то конкретное для этого будет бонусом.
Ответ:
Ответ ShreevatsaR привел меня к поиску в Google «универсального кодировочного детектора delphi», который удивил меня тем, что этот пост занял первое место после того, как был жив всего около 45 минут! Это быстрый Googlebotting! И еще удивительно, что Stackoverflow так быстро занимает 1-е место.
Второй записью в Google была запись в блоге Фреда Икера о Обнаружение кодировки символов , в которой перечислены алгоритмы на разных языках.
Я обнаружил упоминание о Delphi на этой странице, и я сразу же получил бесплатный OpenSource ChsDet Charset Detector в SourceForge , написанный на Delphi и основанный на компоненте Mozilla i18n.
Fantastic! Спасибо всем, кто ответил (все +1), спасибо ShreevatsaR, и еще раз спасибо Stackoverflow, за помощь в поиске моего ответа менее чем за час!