<div dir="ltr"><p dir="ltr">Вставлю і я свої 5 копійок: utf8::encode/decode нічого не перекодовують, а просто помічають скаляр як такий що містить не байти, а символи. Це дозволяє perl відповідно працювати з такими скалярами. Може такий приклад трохи прояснить ситуацію:</p>
<p dir="ltr">$ perl -MDevel::Peek -e '$x = "фів"; Dump($x); utf8::decode($x); Dump($x)'</p><p dir="ltr">SV = PV(0x1ceed80) at 0x1d0d4b8</p><p dir="ltr">  REFCNT = 1</p><p dir="ltr">  FLAGS = (POK,pPOK)</p>
<p dir="ltr">  PV = 0x1cfc5e0 "\321\204\321\226\320\262"\0</p><p dir="ltr">  CUR = 6</p><p dir="ltr">  LEN = 16</p><p dir="ltr">SV = PV(0x1ceed80) at 0x1d0d4b8</p><p dir="ltr">  REFCNT = 1</p><p dir="ltr">  FLAGS = (POK,pPOK,UTF8)</p>
<p dir="ltr">  PV = 0x1cfc5e0 "\321\204\321\226\320\262"\0 [UTF8 "\x{444}\x{456}\x{432}"]</p><p dir="ltr">  CUR = 6</p><p dir="ltr">  LEN = 16</p><p dir="ltr"><br></p><p dir="ltr">Відповідно ці функції відмінно лягають в процес описаний Турським: на вході для отримання з байтів символів викоикаємо decode, на виході для того щоб віддавати байти: encode. Додаткові опції, назразок того самого :utf8 для open просто автоматизують данну операцію.<br>
</p>
<p dir="ltr">-- <br>
Denis Sokolovsky</p>
<div class="gmail_quote">On Jan 16, 2014 3:24 PM, "vti" <<a href="mailto:viacheslav.t@gmail.com" target="_blank">viacheslav.t@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

On 01/16/2014 03:09 PM, <a href="mailto:my.yarnik@yandex.ru" target="_blank">my.yarnik@yandex.ru</a> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

Во-первых, лучше использовать use utf8; вместо use encoding 'utf8';, т.к.<br>
согласно <a href="http://perldoc.perl.org/encoding.html" target="_blank">http://perldoc.perl.org/<u></u>encoding.html</a><br>
данная прагма в 5.18+ является deprecated.<br>
</blockquote>
Спасибо<br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
use open qw/:std :utf8/;<br>
use utf8;<br>
use CGI qw/:standard -utf8/;<br>
</blockquote>
Вот как раз если добавлять :std, то ломаются данные из простой формы<br>
на данный момент рабочий вариант вот такой:<br>
<br>
use open qw/:utf8/;<br>
use utf8;<br>
use CGI qw/:standard -utf8/;<br>
<br>
Но  у него есть мелкий недостаток, он не правильно выводит русское название<br>
файла при glob("*").<br>
Можно конечно использовать костыль, предложенный vti, в виде<br>
Encode::decode('UTF-8', $_);<br>
Тем более, что русских файлов в принципе не желательно держать.<br>
<br>
Для тех кто хочет потестить (посмотреть):<br>
Пожалуйста <a href="http://www.ahost.com.ua/utf8/index.cgi" target="_blank">http://www.ahost.com.ua/utf8/<u></u>index.cgi</a><br>
FTP: admin_utf8 / utf8<br>
<a href="http://77.120.116.161/myadmin" target="_blank">http://77.120.116.161/myadmin</a> admin_utf8 / utf8<br>
</blockquote>
<br>
Перекодировка -- это не костыль. Процитирую свои изменения в тот файл:<br>
<br>
Рекомендации по UTF-8:<br>
1. print должен быть в UTF-8: binmode(STDOUT, ":utf8");<br>
2. glob возвращает файл в байтах, необходимо преобразовать в UTF-8: my<br>
$file = Encode::decode('UTF-8', $_);<br>
3. при открытии файла необходимо сообщить, что мы хотим автоматически<br>
UTF-8: open(FILE, '<:encoding(UTF-8)', "$file");<br>
4. вместо use encoding 'utf-8' использовать use utf8; и только тогда,<br>
когда в исходном тексте программы есть UTF-8 символы (в данном случае есть)<br>
5. с базой вижу есть вариант правильный (set names + mysql_enable_utf8),<br>
надеюсь, что и в схеме стоит кодировка UTF-8 (иначе будет каша потом)<br>
<br>
Сократить этот список можно используя utf8::all.<br>
______________________________<u></u>_________________<br>
Kiev-pm mailing list<br>
<a href="mailto:Kiev-pm@pm.org" target="_blank">Kiev-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/kiev-pm" target="_blank">http://mail.pm.org/mailman/<u></u>listinfo/kiev-pm</a><br>
</blockquote></div>
</div>