отлично Руслан
1)  если поставить
https://github.com/mishin/gists/blob/314a55efcf99289b1e18db4f49b2874671c84f9c/gtrans2.pl
use open ':std', OUT => ':encoding(cp1251)';
 выдает (uname -a
Linux ubuntu 3.8.0-29-generic #42-Ubuntu SMP Tue Aug 13 19:40:39 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
)
 
$./gtrans2.pl --from en --to ru --text "This is a test"
"\x{00d0}" does not map to cp1251 at ./gtrans2.pl line 62.
"\x{00d1}" does not map to cp1251 at ./gtrans2.pl line 62.
..на каждый символ
 
правда пардон я забыл убрать строку
utf8::encode($translated_string);, если без нее, то (при LANG=ru_RU.UTF-8)
$./gtrans2.pl --from en --to ru --text "This is a test"
а при
env|grep LANG
LANG=ru_RU.CP1251
https://github.com/mishin/gists/blob/c1c3a7b0c59f5d61c36ed7056f67d747c1c3b77d/gtrans2.pl
 
./gtrans2.pl --from en --to ru --text "This is a test"
Это тест
Все супер, значит 1-й вариант работает.   ok
 
2) use open ':locale';
https://github.com/mishin/gists/commit/984dd22e001e689d7ab4cd20fbbe46bf9a356633#gtrans2.pl
https://github.com/mishin/gists/blob/984dd22e001e689d7ab4cd20fbbe46bf9a356633/gtrans2.pl
 
env|grep LANG
LANG=ru_RU.CP1251
./gtrans2.pl --from en --to ru --text "This is a test"
Это тест
 
и так работает -ok
оставляем так
 
отлично, спасибо за помощь
 
p.s. c 20 раза http://perldoc.perl.org/utf8.html начинаешь понимать, что здесь написано;)
 
06.09.2013, 01:44, "Ruslan Zakirov" <[email protected]>:
 
Нормально `use open` заюзать так:
http://gist.github.com/6456522
 
Но еще более верно:
 
use open ':locale';
 
И запускать с нужной локалью:
 
LANG="ru_RU.cp1251" gtrans.pl
 
Или если не может тулза установить переменную окружения, то:
 
gtrans.pl | iconv -t cp1251
 
Если и так не может, то тулзу обернуть в gtrans-cp1251.sh :)
 
Или --encoding аргумент добавить, разбор аргументов в BEGIN {}, а потом use open $encoding? (':std', ":encoding($encoding)") : ':locale';
 
Кошерно :)
 


2013/9/5 Nikolay Mishin <[email protected]>
MoscowPM, добрый день,
 
Есть скрипт
перевода гугла из командной строки
запускается
gtrans.pl --from en --to ru --text "This is a test"

из командной строки
гугл выдает строки в KOI

я парсю вывод гугла:
 my @matches =
      $html =~ m{_onmouseout_="this.style.backgroundColor='#fff'">(.*?)</span>}g;
 
    foreach my $translated_string (@matches) {
        my $interm_var =
          Convert::Cyrillic::cstocs( 'KOI8', 'UTF8', $translated_string );
        Encode::from_to( $interm_var, 'utf-8', 'cp1251' );
        say $interm_var;
    }
 
вопрос, можно ли строку
 
          Convert::Cyrillic::cstocs( 'KOI8', 'UTF8', $translated_string );
        Encode::from_to( $interm_var, 'utf-8', 'cp1251' );
 
заменить одним преобразованием, чтобы на выходе был win1251?
у меня этого не получилось
спасибо
 
-
С уважением
Николай Мишин
 

--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org


 
--
Best regards, Ruslan.
,

--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

 
 
--
С уважением
Николай Мишин
 
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить