Массовое перекодирование в UTF-8

17.03.2014  01:20

Возникла преинтересная задача: перекодировать проект, полностью в кодировке Windows-1251 в богоугодную UTF-8.

Начнём с базы. Самый простой и интуитивно-понятный метод: сохранить дамп базы в кодировке UTF-8 и в конце CREATE TABLE везде прибить упоминание предыдущей кодировки, CHARSET=cp1251. Создаём новую базу, сразу в UTF (utf_general_ci) и заливаем туда подкорректированный дамп. Теперь и база, и таблицы, и поля в нужной кодировке.

Далее с командной строки набираем волшебную команду:
find /полный_путь/ -name "*.*" | xargs enconv -L ru -x UTF-8 *
или переходим в нужную директорию и уже из неё набираем:
find . -name "*.*" | xargs enconv -L ru -x UTF-8 *
но по мне — первый вариант как-то спокойнее.
Этот набор команд рекурсивно перелопатит в UTF-8 всё что сможет перекодировать. Вместо маски *.* можно задать конкретное расширение файла, например *.txt — перекодировать все текстовые файлы или *.php — все php скрипты.

возможно понадобится установка пакета enca из репозитариев, например если предыдущая команда выдала ошибку enconv: command not found
тогда из-под рута ставим:
apt-get install enca
или
sudo apt-get install enca

и заново пробуем перекодировать.

Далее в скриптах не забываем поменять header`ы, setlocale, meta-теги, подключение к базе — всё, где указывалась предыдущая кодировка. Удаляем или меняем iconv, где такое перекодирование использовалось. Возможно, придётся явно указать новую локаль, заменить strtolower на mb_strtolower (substr, strstr и другие подобные функции). Могут поотваливаться регулярные выражения — тогда подвертесь какие установлены модификаторы (например, может придётся заменить модификатор U на u).

На крайний случай может потребоваться изменение php.ini — директивы mbstring.internal_encoding, iconv.internal_encoding (и соседние, связанные с кодировками).

Всё!


перейти в Блог | Блог (стр. 13)

Ударим лайками по бездорожью, разгильдяйству и бюрократизму!


Ключевые слова (тэги): *nix 3  молодым домохозяйкам 44  

Вам есть что сказать — ну я же чую.
Высказаться о наболевшем, я выслушаю:
Имя


email (не публикуется)