[Moscow.pm] utf8

artur+moscow.pm.org на niif.spb.su artur+moscow.pm.org на niif.spb.su
Пн Окт 13 13:06:57 PDT 2014


13.10.2014, 23:51, "Nikolay Mishin" <mi на ya.ru>:
> Дорогие перломаны и перлознаи, как любил говорить мой хороший знакомый,
> Приходит мне на вход строка (https://github.com/mishin/presentation/blob/master/show_utf.pl)
> вида
> \(42f) \(43b)\(44e)\(431)\(43b)\(44e) \(41f)\(435)\(440)\(43b)
> - (так utf экспортируется в dsx в IBM Datastage)
> ну я ее преобразую к виду
> \x{42f} \x{43b}\x{44e}\x{431}\x{43b}\x{44e} \x{41f}\x{435}\x{440}\x{43b}
>
> my $utf_str_2 =
>   "\(42f) \(43b)\(44e)\(431)\(43b)\(44e) \(41f)\(435)\(440)\(43b)";
> $utf_str_2 =~ s/\((\w+)\)/\\x{$1}/g;
>
> вот код
>
> #!/usr/bin/env perl
> use utf8;
> use Modern::Perl;
> use Encode::Locale;
> use Data::Dumper qw( Dumper );
> if (-t) {
> binmode( STDIN, ":encoding(console_in)" );
> binmode( STDOUT, ":encoding(console_out)" );
> binmode( STDERR, ":encoding(console_out)" );
> }
> my $love = "Я люблю Перл";
> print Dumper ($love);
> my $utf_str =
> "\x{42f} \x{43b}\x{44e}\x{431}\x{43b}\x{44e} \x{41f}\x{435}\x{440}\x{43b}";
> $utf_str =~ s/\\x\{(\w+)\}/\($1)/g;
> say "$utf_str";
> my $utf_str_2 =
> "\(42f) \(43b)\(44e)\(431)\(43b)\(44e) \(41f)\(435)\(440)\(43b)";
> $utf_str_2 =~ s/\((\w+)\)/\\x{$1}/g;
> say 1;
> say $utf_str_2;
> но интересно, что если
> у тебя есть строка
> $a="\x{42f}";
> say $a;
> то say выведет "Я"
> но если
> у тебя происходят преобразования
> и сама строка становится
> "\x{42f}" после
> $a="\(42f)";
> $a =~ s/\((\w+)\)/\\x{$1}/g;
> то
> say $a;
> выводит "\x{42f}"
> вопрос (тем, кто дочитал;))
> как сделать так, чтобы напечаталась "Я" ??


  # perl -CSA -lnpe 's#\\\((...)\)#chr(hex$1)#gsme'
  \(42f) \(43b)\(44e)\(431)\(43b)\(44e) \(41f)\(435)\(440)\(43b)
  Я люблю Перл

-- 
wbw, artur


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