суббота, 11 августа 2007 г.

Массовое конвертирование содержимого файлов из windows-1251 (cp1251) в UTF-8 - iconv

В общем сегодня я достаточно долго искал чем же и как конвертировать содержимое всех своих php файлов из windows-1251 (cp1251) в UTF-8. 
Руками работать не хотелось, а головой не получалось. Но в результате с легким матерком написал вот этот bash-скрипт:
#!/bin/bash

FILES="./*.php"
for i in $FILES
do
echo "Converting $i to UTF-8 encoding..."
mv $i $i.icv
iconv -f WINDOWS-1251 -t UTF-8 $i.icv > $i
rm -f $i.icv
done
Он достаточно резво конвертирует все файлы в текущей директории  из windows-1251 (cp1251) в UTF-8:

aldekein@Aldekein:~/123$ ./recode
Converting ./add_by_emai2.php to UTF-8 encoding...
Converting ./add_by_email.php to UTF-8 encoding...
Converting ./fs.php to UTF-8 encoding...
Converting ./head.inc.php to UTF-8 encoding...



Если же туда присобачить вывод команды find -iname '*.php', то получим еще и рекурсивную работу в папке...

2 комментария:

Alexander комментирует...

Еще один вариант - это сконвертировать непосредственно с помощью sql запроса:

ALTER TABLE mytable CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Преимущество в том, что здесь средствами СУБД будет произведен анализ данных, уже содержащихся в таблице. И при необходимости тип данных будет изменен. Т.е. если в поле с типом TEXT хранились данные в однобайтовой кодировке, а при конвертации в utf8 выяснится, что данные туда уместятся только если сменить тип, например, на MEDIUMTEXT, то это и будет сделано автоматически.

Подробнее здесь
http://dev.mysql.com/doc/refman/5.0/en/alter-table.html

Анонимный комментирует...

Добрый вечер,
а не могли бы Вы объяснить чайнику подробнее что куда положить и как запустить этот скрипт?