<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">В документации идущей с Perl касамо
      Unicode: perluniintro, perlunicode везде только Encode. С
      остальным согласен.<br>
      <br>
      On 01/17/2014 03:43 PM, Denis Sokolovsky wrote:<br>
    </div>
    <blockquote
cite="mid:CALGik+LiOS7wh-M2M3YCeDN_F5i6m35Z9o+bDyaPUM8=aQAk3Q@mail.gmail.com"
      type="cite">
      <div dir="ltr">Дозвольте не погодитись. По-перше я не бачив що б
        всюди рекомендували Encode замість utf8::encode/decode - вони по
        різному працюють і не можуть виключно заміщати одна одну.
        По-друге все залежить від мети. utf8::decode більш строгий до
        корректності utf8 строки ніж Encode, який пробує створити щось
        валідне будь-що. Натомість utf8::decode не вміє займатись
        перекодовуванням з будь-чого в utf8. Ось простий приклад, що
        демострує строгість utf8::decode:
        <div>
          <div><br>
          </div>
          <div>
            <div>$ perl -MEncode -MDevel::Peek -e '$x = "фів\321"; print
              "Original\n"; Dump($x); print "Encode/utf8\n";
              Dump(Encode::decode("UTF-8", $x)); utf8::decode($x);
              Dump($x);'</div>
            <div>Original</div>
            <div>SV = PV(0x92f7750) at 0x9313f08</div>
            <div>  REFCNT = 1</div>
            <div>  FLAGS = (POK,pPOK)</div>
            <div>  PV = 0x930f5b8 "\321\204\321\226\320\262\321"\0</div>
            <div>  CUR = 7</div>
            <div>  LEN = 12</div>
            <div>Encode/utf8</div>
            <div>SV = PV(0x92f7d60) at 0x93935d0</div>
            <div>  REFCNT = 1</div>
            <div>  FLAGS = (TEMP,POK,pPOK,UTF8)</div>
            <div>  PV = 0x939ae78
              "\321\204\321\226\320\262\357\277\275"\0 [UTF8
              "\x{444}\x{456}\x{432}\x{fffd}"]</div>
            <div>  CUR = 9</div>
            <div>  LEN = 12</div>
            <div>SV = PV(0x92f7750) at 0x9313f08</div>
            <div>  REFCNT = 1</div>
            <div>  FLAGS = (POK,pPOK)</div>
            <div>  PV = 0x930f5b8 "\321\204\321\226\320\262\321"\0</div>
            <div>  CUR = 7</div>
            <div>  LEN = 12</div>
          </div>
        </div>
        <div><br>
        </div>
        <div>Відповідно функція is_utf8 для результату Encode видає
          true, а після utf8::decode строка так і не стала utf8. Я
          погоджуюсь що для більшості веб задач варто все ж таки
          використовувати Encode (особливо коли мова стосується данних
          від користувача) тому що вона майже наглухо fail-proof, але то
          не є панацея.</div>
        <div><br>
        </div>
      </div>
      <div class="gmail_extra"><br>
        <br>
        <div class="gmail_quote">2014/1/16 vti <span dir="ltr"><<a
              moz-do-not-send="true"
              href="mailto:viacheslav.t@gmail.com" target="_blank">viacheslav.t@gmail.com</a>></span><br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div bgcolor="#FFFFFF" text="#000000">
              <div>Не надо путать utf8::* с Encode::*. Везде рекомендуют
                использовать Encode, а не вручную проставлять
                utf8-флаги. Кроме того используя 'UTF-8' в Encode,
                вместо 'utf8', utf-символы кое-как, но валидируются.
                <div>
                  <div class="h5"><br>
                    <br>
                    On 01/16/2014 03:47 PM, Denis Sokolovsky wrote:<br>
                  </div>
                </div>
              </div>
              <div>
                <div class="h5">
                  <blockquote type="cite">
                    <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 moz-do-not-send="true"
                          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
                            moz-do-not-send="true"
                            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 moz-do-not-send="true"
                                href="http://perldoc.perl.org/encoding.html"
                                target="_blank">http://perldoc.perl.org/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 moz-do-not-send="true"
                              href="http://www.ahost.com.ua/utf8/index.cgi"
                              target="_blank">http://www.ahost.com.ua/utf8/index.cgi</a><br>
                            FTP: admin_utf8 / utf8<br>
                            <a moz-do-not-send="true"
                              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>
_______________________________________________<br>
                          Kiev-pm mailing list<br>
                          <a moz-do-not-send="true"
                            href="mailto:Kiev-pm@pm.org" target="_blank">Kiev-pm@pm.org</a><br>
                          <a moz-do-not-send="true"
                            href="http://mail.pm.org/mailman/listinfo/kiev-pm"
                            target="_blank">http://mail.pm.org/mailman/listinfo/kiev-pm</a><br>
                        </blockquote>
                      </div>
                    </div>
                    <br>
                    <fieldset></fieldset>
                    <br>
                    <pre>_______________________________________________
Kiev-pm mailing list
<a moz-do-not-send="true" href="mailto:Kiev-pm@pm.org" target="_blank">Kiev-pm@pm.org</a>
<a moz-do-not-send="true" href="http://mail.pm.org/mailman/listinfo/kiev-pm" target="_blank">http://mail.pm.org/mailman/listinfo/kiev-pm</a>
</pre>
                  </blockquote>
                  <br>
                </div>
              </div>
            </div>
            <br>
            _______________________________________________<br>
            Kiev-pm mailing list<br>
            <a moz-do-not-send="true" href="mailto:Kiev-pm@pm.org">Kiev-pm@pm.org</a><br>
            <a moz-do-not-send="true"
              href="http://mail.pm.org/mailman/listinfo/kiev-pm"
              target="_blank">http://mail.pm.org/mailman/listinfo/kiev-pm</a><br>
            <br>
          </blockquote>
        </div>
        <br>
        <br clear="all">
        <div><br>
        </div>
        -- <br>
        Denis Sokolovsky
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
Kiev-pm mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Kiev-pm@pm.org">Kiev-pm@pm.org</a>
<a class="moz-txt-link-freetext" href="http://mail.pm.org/mailman/listinfo/kiev-pm">http://mail.pm.org/mailman/listinfo/kiev-pm</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>