<HTML><BODY>Здравствуйте, Николай!<br><br>Вы используете Console::Locale.<br>Почитайте документацию <a href="https://metacpan.org/pod/Encode::Locale">https://metacpan.org/pod/Encode::Locale</a><br>Из нее вы поймете, что этот модуль определяет кодировку консоли<br>более точно, чем детекторы.<br><br>Если для STDIN, STDERR, STDOUT вы сделали телодвижения по<br>автоматической перекодировке, то для @ARGV ничего не сделано,<br>поэтому разумно использовать:<br><br><code class="pl plain">my $lang = decode(</code><code class="pl string">locale</code> <code class="pl plain">=> </code><code class="pl variable">$ARGV</code><code class="pl plain">[0]);</code><br><br>А детекторы кодировок - это зло, существующее из-за безнадеги...<br><br>С почтением,<br>  Илья Винокуров.<br><br><br>Mon, 22 Sep 2014 23:58:07 +0400 от Nikolay Mishin <mi@ya.ru>:<br>
<blockquote style="border-left:1px solid #0857A6; margin:10px; padding:0 0 0 10px;">
        <div id="">
        



    









        
        


        
        
        
        
        

        
        

        
        



<div class="js-helper js-readmsg-msg">
        <style type="text/css"></style>
        <div>
                <base target="_self" href="https://e.mail.ru/">
                
                        <div id="style_14114159050000000484_BODY">Илья, привет , удалил Text::Iconv<br>
-my $converter = Text::Iconv->new( "cp1251", "utf-8");<br>
-$lang = $converter->convert($lang);<br>
+Encode::from_to($lang, 'windows-1251', 'utf-8');<br>
<a href="https://github.com/mishin/presentation/commit/2d1ba8adcfc451d45454490b5bf442f95bd41e0a" target="_blank">https://github.com/mishin/presentation/commit/2d1ba8adcfc451d45454490b5bf442f95bd41e0a</a><br>
и все заработало,<br>
правда получается, что кодировка , которую Encode::Detect::Detector<br>
определяет как ISO-8859-7 является одновременно и кодировкой windows-1251,<br>
странно, что больше этого нигде не написано, в общем парадоксальное решение,<br>
чисто перебором<br>
<br>
22.09.2014, 12:51, "Илья Винокуров" <<a href="/compose?To=ilvin@mail.ru">ilvin@mail.ru</a>>:<br>
>  Здравствуйте, Николай.<br>
><br>
>  Внутри Perl строки хранятся в кодировке, совместимой с UTF-8. Эта кодировка называется utf8.<br>
>  Когда строки вводятся в Perl, их нужно декодировать из различных кодировок в utf8.<br>
>  В том числе нужно декодировать UTF-8 в utf8.<br>
>  Если строку нужно вывести из Perl, то эту строку нужно кодировать в различные кодировки.<br>
>  В том числе нужно кодировать utf8 в UTF-8<br>
><br>
>  Этим занимаются функции Encode::encode('UTF-8', $string) и Encode::decode('UTF-8', $string).<br>
><br>
>  Text::Iconv - не используйте это, если точно не знаете почему вам нужен именно этот модуль.<br>
><br>
>  Концепцию работы с кодировками в Perl я рассказал,<br>
>  а вот свой скрипт поправить потрудитесь сами пожалуйста...<br>
><br>
>  PS: Чтобы не возиться в явном виде с перекодированием строк, в перл используют<br>
><br>
>  binmode STDIN, ":encoding(console_in)" if -t STDIN; binmode STDOUT, ":encoding(console_out)" if -t STDOUT; binmode STDERR, ":encoding(console_out)" if -t STDERR;<br>
>  После этого в STDIN/STDOUT можно читать/писать строки в кодировке utf8 без перекодирования...<br>
><br>
>  С почтением,<br>
>    Илья Винокуров.<br>
><br>
>  Mon, 22 Sep 2014 01:28:15 +0400 от Nikolay Mishin <<a href="/compose?To=mi@ya.ru">mi@ya.ru</a>>:<br>
>>  Привет, MoscowPM,<br>
>>  тут родился вопрос под win7 (юникс могут быть теже странности, не проверял)<br>
>><br>
>>  #!/usr/bin/env perl<br>
>>  use utf8;<br>
>>  use Modern::Perl;<br>
>>  use Encode::Locale;<br>
>>  use Encode qw( decode encode from_to);<br>
>>  use Text::Iconv;<br>
>>  use Encode::Detect::Detector;<br>
>>  use Data::Dumper qw( Dumper );<br>
>><br>
>>  if (-t)<br>
>>  {<br>
>>      binmode(STDIN, ":encoding(console_in)");<br>
>>  binmode(STDOUT, ":encoding(console_out)");<br>
>>  binmode(STDERR, ":encoding(console_out)");<br>
>>  }<br>
>><br>
>>  my $lang = shift or die "Usage: $0 What_is_your_language?\n";<br>
>>  my_dump('lang_01',$lang);<br>
>>  my $converter = Text::Iconv->new( "cp1251", "utf-8");<br>
>>  $lang = $converter->convert($lang);<br>
>>  my_dump('lang_02',$lang);<br>
>>  $lang = Encode::decode("utf8",$lang);<br>
>>  my_dump('lang_03',$lang);<br>
>>  my_dump('lang_04_перл',qq{перл});<br>
>><br>
>>   $lang =~ /(perl|перл) (?{print "use Perl or die!!\nИспользуй Перл или умри!!";}) /ix;#русский не мачится, почему?<br>
>><br>
>>   sub my_dump<br>
>>   {<br>
>>   my ($name,$var)=@_;<br>
>>   local $Data::Dumper::Useqq = 1;<br>
>>   local $Data::Dumper::Indent = 0;<br>
>>   local $Data::Dumper::Terse = 1;<br>
>>   print(Encode::Detect::Detector::detect(qq{$lang})." ".qq{\$$name }." dump=".Dumper($var)."\n");<br>
>>   }<br>
>><br>
>>  этот же код на гитхабе<br>
>> <a href="https://github.com/mishin/presentation/blob/master/100_regex_4_moscow_pm.pl" target="_blank">https://github.com/mishin/presentation/blob/master/100_regex_4_moscow_pm.pl</a><br>
>><br>
>>  моя задача была, чтобы скрипт<br>
>>  perl 100_regex_4_moscow_pm.pl перл<br>
>>  читая из консоли слово "перл" находил его в регексе внутри скрипта<br>
>><br>
>>  вопросы:<br>
>>  1) почему, если в консоле<br>
>>  perl -MEncode::Detect::Detector -E "say Encode::Detect::Detector::detect(qq{перл})"<br>
>>  у меня кодировка ISO-8859-7<br>
>>  my $converter = Text::Iconv->new( "cp1251", "utf-8");<br>
>>  Text::Iconv ее проглатывает как cp1251 (причем ISO там не проходит) ?<br>
>><br>
>>  2)что происходит со строкой здесь<br>
>>  UTF-8 $lang_02 dump="\320\277\320\265\321\200\320\273"<br>
>>  $lang = Encode::decode("utf8",$lang);<br>
>>  UTF-8 $lang_03 dump="\x{43f}\x{435}\x{440}\x{43b}"<br>
>>  --что такое делает decode?<br>
>>  я так понимаю - он починивает utf8, но что конкретно<br>
>><br>
>>  спасибо, хорошей недели!!<br>
>><br>
>>  --<br>
>>  С уважением<br>
>>  Николай Мишин<br>
>><br>
>>  --<br>
>>  Moscow.pm mailing list<br>
>> <a href="/compose?To=moscow%2dpm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
>  ,<br>
><br>
>  --<br>
>  Moscow.pm mailing list<br>
> <a href="/compose?To=moscow%2dpm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
<br>
-- <br>
С уважением<br>
Николай Мишин<br>
-- <br>
Moscow.pm mailing list<br>
<a href="/compose?To=moscow%2dpm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
<br>
</div>
                        
                
                <base target="_self" href="https://e.mail.ru/">
        </div>

        
</div>


</div>
</blockquote>
<br></BODY></HTML>