C#: распознать кодировку
Пробовал
Есть только фолдер с файлами различной кодировки, необходимо чтобы все файлы стали в UTF8.
Есть только фолдер с файлами различной кодировки, необходимо чтобы все файлы стали в UTF8.
Я про первые 3 байта в файле.
UTF-16 big-endian (FE FF)
UTF-16 little-endian (FF FE)
UTF-32 big-endian (00 00 FE FF)
UTF-32 little-endian (FF FE 00 00)[/SIZE][/FONT]
Читаешь первые три байта файла. И если они равны 0xEF 0xBB 0xBF, то файл должен быть в UTF-8. Правда, это условие не всегда выполняется.
Читаешь первые три байта файла. И если они равны 0xEF 0xBB 0xBF, то файл должен быть в UTF-8. Правда, это условие не всегда выполняется.
Что-то мне говорить, что это BOM ;)
На сколько я помню как раз утф-8 проще всего и распознать. На практике в утф-8 используется от 1 до 4 байт. Два первых старших бита в первом байте всегда установлены в единицу. С учетом BOM-а нужно прочитать первых 7 байт. Для полной гарантии и определения размерности байт на символ конечно лучше прочесть все же первые 11. Собственно по ним и будет видно.
Таким образом, можно попытаться переводить текст (с неизвестной кодировкой) из UTF-8 в ANSI и ловить исключение. Если текст был в кодировке ANSI, то может быть сгенерировано исключение.
Это ленивый метод, который в теории может сработать.
Ну вообщем я пропагандировал этот же подход. Дополнительно, если возможно основываться на некоем формате/содержимом обрабатываемых файлов можно искать какие-либо шаблоны. Например распространенные слова языка.