Обычная такая задача для любого разработчика - перевести проект с одной кодировки в другую.
Кроме того, что нужно перевести БД и научить скрипты работать с
utf8-данными и отдавать их, нужно перевести все шаблоны и все исходники в
UTF-8. Причем не просто с
BOM-символом, а в
UTF-8 Cookie - в первых двух строчках должна быть кука -
encoding="utf8" (кука зависит от настроек редактора, мне нравится такая :).
Для любителей рутины задача превосходная - открыл файл, добавил куку, сохранил как
UTF-8 Cookie (так чтобы вся не латиница осталась корректной) и закрыл.
После того, как я перевел в ручную 2 файла, я устал (всего файлов несколько сотен).
Вот скрипт, который меня спас - написал за пол-часа:
#~ DIR=../tmpl/#~ ADD='encoding="utf-8"'DIR=../lib/ADD='encoding="utf-8"'find $DIR -type f | while read FILEdo if [ ! -n "`cat $FILE | head -n2 | grep -i $ADD`" ]; then echo $FILE #~ perl -Mencoding=cp1251,STDOUT,utf8 -pe 1 <$FILE | perl -e "print qq{^[\`$ADD\`]\n}, <>;" | (rm $FILE; cat >$FILE) perl -Mencoding=cp1251,STDOUT,utf8 -pe 1 <$FILE | perl -e "print do { chomp(\$_ = <>); /^#!/ ? \$_.' -CDSA' : \$_ }, qq{\nuse utf8; # $ADD\n}, <>;" | (rm $FILE; cat >$FILE) fidone
С помощью первой части (та, что закомментирована) обошел все шаблоны и там где не было куки (кукой может являться атрибут encoding в
<?xml ?>, если это xml-документ, поэтому пропускаем), добавил первой строкой ее в виде комментария шаблонизатора :) и поменял кодировку файла.
С помощью второй части (инвертирование комментарий) обошел все модули (а также тестирующие скрипты), произвел те же операции, только в качестве куки использовал
Perl-прагму
utf8 с необходимым комментарием, только это должна была быть вторая строка, а также ко всем скриптам добавил ключ запуска
CDSA.
После чего, весь проект заработал в
UTF-8.
Не сразу, конечно, в некоторых модулях первая и вторая строка была
POD-документация и кука вставилась прямо в нее :)
После ручной коррекции, все заработало.
Original post
http://sharifulin.livejournal.com/20563.html