[Kiev-pm] utf8
vti
viacheslav.t at gmail.com
Thu Jan 16 05:57:10 PST 2014
Не надо путать utf8::* с Encode::*. Везде рекомендуют использовать
Encode, а не вручную проставлять utf8-флаги. Кроме того используя
'UTF-8' в Encode, вместо 'utf8', utf-символы кое-как, но валидируются.
On 01/16/2014 03:47 PM, Denis Sokolovsky wrote:
>
> Вставлю і я свої 5 копійок: utf8::encode/decode нічого не
> перекодовують, а просто помічають скаляр як такий що містить не байти,
> а символи. Це дозволяє perl відповідно працювати з такими скалярами.
> Може такий приклад трохи прояснить ситуацію:
>
> $ perl -MDevel::Peek -e '$x = "фів"; Dump($x); utf8::decode($x); Dump($x)'
>
> SV = PV(0x1ceed80) at 0x1d0d4b8
>
> REFCNT = 1
>
> FLAGS = (POK,pPOK)
>
> PV = 0x1cfc5e0 "\321\204\321\226\320\262"\0
>
> CUR = 6
>
> LEN = 16
>
> SV = PV(0x1ceed80) at 0x1d0d4b8
>
> REFCNT = 1
>
> FLAGS = (POK,pPOK,UTF8)
>
> PV = 0x1cfc5e0 "\321\204\321\226\320\262"\0 [UTF8
> "\x{444}\x{456}\x{432}"]
>
> CUR = 6
>
> LEN = 16
>
>
> Відповідно ці функції відмінно лягають в процес описаний Турським: на
> вході для отримання з байтів символів викоикаємо decode, на виході для
> того щоб віддавати байти: encode. Додаткові опції, назразок того
> самого :utf8 для open просто автоматизують данну операцію.
>
> --
> Denis Sokolovsky
>
> On Jan 16, 2014 3:24 PM, "vti" <viacheslav.t ÎÁ gmail.com
> <mailto:viacheslav.t ÎÁ gmail.com>> wrote:
>
> On 01/16/2014 03:09 PM, my.yarnik ÎÁ yandex.ru
> <mailto: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.
> _______________________________________________
> Kiev-pm mailing list
> Kiev-pm ÎÁ pm.org <mailto:Kiev-pm ÎÁ pm.org>
> http://mail.pm.org/mailman/listinfo/kiev-pm
>
>
>
> _______________________________________________
> Kiev-pm mailing list
> Kiev-pm ÎÁ pm.org
> http://mail.pm.org/mailman/listinfo/kiev-pm
----------- ���� ���-----------
÷ÌÏÖÅÎÉÅ × ÆÏÒÍÁÔÅ HTML ÂÙÌÏ ÉÚ×ÌÅÞÅÎÏ…
URL: <http://mail.pm.org/pipermail/kiev-pm/attachments/20140116/69ff1ee6/attachment.html>
More information about the Kiev-pm
mailing list