[Moscow.pm] перекодировка

Ruslan Zakirov ruz на bestpractical.com
Пт Сен 6 02:33:16 PDT 2013


Пожалуйста. Вместо спасиба, блог пост лучше напишите в стиле было так, а
стало так и темой "Unicode aware web scrapping in command line perl
scripts". Или статью в Pragmatic perl :)

2013/9/6 Nikolay Mishin <mi на ya.ru>

> отлично Руслан
> 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" <ruz на bestpractical.com>:
>
>
> Нормально `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 <mi на ya.ru>
>
> MoscowPM, добрый день,
>
> Есть скрипт
> перевода гугла из командной строки
> https://github.com/mishin/gists/blob/master/gtrans.pl
> запускается
>
> 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
> moscow-pm на pm.org | http://moscow.pm.org
>
>
>
>
> --
> Best regards, Ruslan.
> ,
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>
>
> --
> С уважением
> Николай Мишин
>
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>


-- 
Best regards, Ruslan.
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20130906/6f9ae32c/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm