Posterous theme by Cory Watilo

Filed under: cp1251

Работа. Перевод проекта с cp1251 на utf8. Подводный камень.

В предыдущем посте я перевел проект с cp1251 на utf8.
Все отлично работает, протестировал работу в FireFox, Safari и Opera.
Но когда решил протестировать в IE, оидн из интерфейсов отказывался работать, а именно - выскакивала JS-ошибка, мол пропущена точка-с-запятой, даже указывалась строка. Естественно данная строка была валидна.
После нескольких минут поиска "JS-ошибки", я понял, что это вовсе не ошибка.
В одном из подключаемых JS-скриптов (самописный плагин для jQuery) был комментарий в кодировке cp1251 и так как весь проект UTF-8, то IE не мог понять данный JS и выдавал ошибку на строку после подключения JS-скрипта.
После переведа скрипта в UTF-8 все заработало.
Вот тебе и комментарии :)
Original post http://sharifulin.livejournal.com/21024.html

Работа. Перевод проекта с cp1251 на utf8.

Обычная такая задача для любого разработчика - перевести проект с одной кодировки в другую.
Кроме того, что нужно перевести БД и научить скрипты работать с 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