Recursive converter of text file's encodings in folder.
Для работы программы требуется .NET Framework 3.5. Возможно скомпилировать версию и для более новых версий фреймворков.
Это программа для преобразования кодировок всех текстовых файлов, подходящих под фильтр, в указанной директории и её поддиректориях.
Использовать программу очень просто. Для начала нужно указать:
- путь к папке с текстовыми файлами, которые требуется преобразовать;
- новую кодировку, в которую планируется преобразовать файлы. Доступны все юникодовые кодировки и CP1251;
- новые окончания строк в стиле:
- Windows (CRLF - \r\n)
- Linux (LF - \n)
- (CR - \r)
- не преобразовывать (по умолчанию)
- фильтр - маски файлов, которые будут обрабатываться. По умолчанию фильтр настроен на расширения многих текстовых форматов файлов, но если у вас другое расширение файла, его нужно будет вписать;
- поиск рекурсивно в поддиректориях или только в указанной папке.
Настраивайте фильтр так, чтобы он не затронул бинарные файлы, иначе они будут испорчены.
Когда путь будет указывать на существующую папку, станет доступна кнопка Анализ. При нажатии этой кнопки все файлы будут просканированы и в таблице будет указано, какие файлы будут обработаны, какая у них кодировка в данный момент и какие окончания строк.
После завершения анализа можно будет подтвердить отмеченные изменения кнопкой Конвертировать.
Внимание, при этом все файлы будут перезаписаны! Если файлы в этой папке для вас важны, сделайте их резервную копию.
После подтверждения в таблице будут показаны результаты. Если все обрабатываемые файлы были доступны для записи, мы получили файлы в указанной кодировке с указанными окончаниями строк.
Когда я захотел скомпилировать свой игровой движок на Linux, выяснилось, что все исходные файлы, содержащие русские комментарии имеют стандартную для Windows кодировку CP1251. Так как стандартной кодировкой для Linux является UTF-8 и компиляторы не понимают никакие кодировки кроме Юникода, мне пришлось конвертировать все эти файлы в UTF-8.
Но позже, когда я вернулся на Windows и Visual Studio, оказалось, что она неправильно трактует файлы UTF-8 без BOM. Она трактовала их как файлы в кодировке CP1251. Кроме того она сохраняла новые файлы в CP1251. Но выяснилось, что Visual Studio правильно понимает файлы в UTF-8 с BOM.
Поэтому было решено поменять кодировки всех файлов проекта из смеси UTF-8 без BOM и CP1251 в UTF-8 с BOM. С такой кодировкой хорошо работает как GCC в Linux, так и MSVC в Windows.
Так как я не хотел делать это вручную через Notepad++, преобразуя файлы по-одиночке, я начал искать программы, которые могли бы это сделать автоматически сразу со всеми моими исходными файлами. Практически сразу наткнулся на UTFCast Express. После того, как я ей воспользовался, она распознала UTF-8 без BOM как CP1251, и произвела конверсию повторно, вместо того, чтобы просто добавить BOM в UTF-8 файл. В итоге получился двойной Юникод, когда один кириллический символ занимает 4 байта.
Также я пробовал пробные версии платных программ, в том числе и тот же UTFCast, только платный. Но все эти программы оказались перегружены функционалом, в них было тяжело ориентироваться, и я не нашёл, как решить мою задачу с их помощью.
Не найдя бесплатной альтернативы, я решил написать эту программу.