Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Перкодировка большого числа файлов из cp1251 в UTF-8
- ====================================================
- Полное условие задачи:
- * Смена кодировки текстового файла с cp1251 на UTF-8
- * Последняя строка обязательно должна завершаться символом конца строки
- * В качестве символа конца строки должны выступать CR + LF, как в DOS
- Решение с помощью редактора Vim:
- # В редакторе меняем текущую директорию, на каталог с файлами, которые надо
- # перекодировать.
- :cd /path/to/dir/with/files/
- # Используя wildcards описываем класс файлов из нашего каталога, которые нам
- # надо открыть, и добавляем этот класс в список аргументов Vim. Практически это
- # значит, что все файлы будут считаны в отдельные буферы Vim, а для первого из
- # них ещё будет открыто окно Vim для возможности его редактирования.
- :args *.txt
- # Далее, выполняем набор следующих комманд.
- :argdo e ++nobin ++enc=cp1251 | set eol fenc=utf-8 ft=dos | update
- # ``:argdo`` выполняет стоящую далее через пробел строку с командами для всех
- # прежде открытых нами аргументов Vim.
- #
- # ``e ++nobin ++enc=cp1251`` открывает заново каждый аргумент в текстовом
- # недвоичном режиме (``++nobin`` в общем-то ненужная перестраховка) с
- # использованием кодировки cp1251. После этого идет разделитель комманд "|".
- # Перед ним обязательно в данном случае должен быть пробел, иначе команда
- # ``e[dit]`` получит неправильное имя кодировки "cp1251|", а дальнейшие слова
- # set, eol и т.п. будет воспринимать как обозначения имен файлов. В итоге, она
- # вместо того, чтобы повторно открыть файл, связанный с текущим буфером, будет
- # пытаться открыть файл set и ещё может выдать ошибку, что может открывать
- # только один файл, а не несколько.
- #
- # ``set eol`` или ``set endofline`` гарантирует, что в файле при записи
- # последняя строка обязательно будет кончаться символ конца строки.
- # Противополжная команда здесь -- ``set noeol``.
- #
- # ``set fenc=utf-8`` или ``set fileencoding=utf-8`` гарантирует, что при записи
- # файла будет использована кодировка UTF-8.
- #
- # ``set ft=dos`` или ``set filetype=dos`` определяет, что при записи в качестве
- # символов конца строки будет использована последовательность \r\n = CR + LF =
- # 0x0D + 0x0A = chr(13) + chr(10).
- #
- # Все три опции объединены через пробел после одной команды ``set``. Команда
- # ``update`` гарантирует, что файл будет сохранен только если в нем есть
- # изменения.
Add Comment
Please, Sign In to add comment