[Kiev-pm] utf8

vti viacheslav.t at gmail.com
Thu Jan 16 05:23:47 PST 2014


On 01/16/2014 03:09 PM, my.yarnik ÎÁ yandex.ru wrote:
>> Во-первых, лучше использовать use utf8; вместо use encoding 'utf8';, т.к.
>> согласно http://perldoc.perl.org/encoding.html
>> данная прагма в 5.18+ является deprecated.
> Спасибо
>
>> use open qw/:std :utf8/;
>> use utf8;
>> use CGI qw/:standard -utf8/;
> Вот как раз если добавлять :std, то ломаются данные из простой формы
> на данный момент рабочий вариант вот такой:
>
> use open qw/:utf8/;
> use utf8;
> use CGI qw/:standard -utf8/;
>
> Но  у него есть мелкий недостаток, он не правильно выводит русское название
> файла при glob("*").
> Можно конечно использовать костыль, предложенный vti, в виде
> Encode::decode('UTF-8', $_);
> Тем более, что русских файлов в принципе не желательно держать.
>
> Для тех кто хочет потестить (посмотреть):
> Пожалуйста http://www.ahost.com.ua/utf8/index.cgi
> FTP: admin_utf8 / utf8
> http://77.120.116.161/myadmin admin_utf8 / utf8

Перекодировка -- это не костыль. Процитирую свои изменения в тот файл:

Рекомендации по UTF-8:
1. print должен быть в UTF-8: binmode(STDOUT, ":utf8");
2. glob возвращает файл в байтах, необходимо преобразовать в UTF-8: my
$file = Encode::decode('UTF-8', $_);
3. при открытии файла необходимо сообщить, что мы хотим автоматически
UTF-8: open(FILE, '<:encoding(UTF-8)', "$file");
4. вместо use encoding 'utf-8' использовать use utf8; и только тогда,
когда в исходном тексте программы есть UTF-8 символы (в данном случае есть)
5. с базой вижу есть вариант правильный (set names + mysql_enable_utf8),
надеюсь, что и в схеме стоит кодировка UTF-8 (иначе будет каша потом)

Сократить этот список можно используя utf8::all.


More information about the Kiev-pm mailing list