Подскажите пжста, как на перл перекодировать в читаемый вид уникод-строку типа \u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439
> Подскажите пжста, как на перл перекодировать в читаемый вид уникод-строку типа \u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439
#!/usr/bin/perl60use Encode;
$text='\u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439';
print Encode::from_to($text,'utf8','koi8r');
>> Подскажите пжста, как на перл перекодировать в читаемый вид уникод-строку типа \u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439
>#!/usr/bin/perl
> use Encode;
> $text='\u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439';
> print Encode::from_to($text,'utf8','koi8r');60сорри, я наверно как то сформулировал не так.
Нужно получить в той же кодировке (utf8), но в читабельном виде, в строке на самом деле слово "Люберецкий", а ваш скрипт выдает видимо количество символов в строке :).
Чтобы вывести текст надо вывести измененное содержимое переменной $text.print $text;
> #!/usr/bin/perl
> use Encode;
> $text='\u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439';
> Encode::from_to($text,'utf8','koi8r');
> print $text;И это опять не подойдёт Заказчику?
echo '\u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439' |SOME_SECRET_COMMAND ; echo
Люберецкий
$ _
--- sed '/g ; s/, //'|recode u2/x2..
Да, чего-то не подходит. )
> Люберецкий
> $ _
> --- sed '/g ; s/, //'|recode u2/x2..--агхр sed 's/\\u/, 0x/g ; s/, //'|recode u2/x2..
>> Люберецкий
>> $ _
>> --- sed '/g ; s/, //'|recode u2/x2..
> --агхр sed 's/\\u/, 0x/g ; s/, //'|recode u2/x2..да хотелось бы именно на перл и без вызова внешних программ.
На питоне в 2 строчки делается, а на перле чет не могу найти работающего решения(
>> Люберецкий
>> $ _
>> --- sed '/g ; s/, //'|recode u2/x2..
> --агхр sed 's/\\u/, 0x/g ; s/, //'|recode u2/x2..Спасибо, пришлось все же воспользоваться Вашим решением,
единственно что для recode добавил флаг f, иначе ошибка "recode: Ambiguous output in step `Hexadecimal-2..data"# echo '\u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439' | sed 's/\\u/, 0x/g ; s/, //' | recode -f u2/x2 ; echo
Люберецкий
>>> --- sed '/g ; s/, //'|recode u2/x2..
>> --агхр sed 's/\\u/, 0x/g ; s/, //'|recode u2/x2..
> Спасибо, пришлось все же воспользоваться Вашим решением,|-D "Ещё долго седые опенетовцы рассказывли детям предания, как Митрофанов заборол перлы-питоны-повершелы одним ядрёным баш-сед-фу."
> единственно что для recode добавил флаг f, иначе ошибка "recode: Ambiguous output
> Чтобы вывести текст надо вывести измененное содержимое переменной $text.
> print $text;да конечно! посыпаю голову пеплом ))
>>> Подскажите пжста, как на перл перекодировать в читаемый вид уникод-строку типа \u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439
>>#!/usr/bin/perl
>> use Encode;
>> $text='\u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439';
>> print Encode::from_to($text,'utf8','koi8r');60
> сорри, я наверно как то сформулировал не так.
> Нужно получить в той же кодировке (utf8), но в читабельном виде,
> в строке на самом деле слово "Люберецкий", а ваш скрипт выдает
> видимо количество символов в строке :).виноват, исправляюсь ))
#!/usr/bin/perluse Text::Iconv;
$text = '\u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439';
print Text::Iconv->new("java", "koi8-r")->convert($text);у вас какой-то юникод неправильный (смс-ки вроде как в ucs-2be или это не для рассылок смс?)
> виноват, исправляюсь ))#!/usr/bin/perl
> use Text::Iconv;
> $text = '\u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439';
> print Text::Iconv->new("java", "koi8-r")->convert($text);
> у вас какой-то юникод неправильный (смс-ки вроде как в ucs-2be или это
> не для рассылок смс?)не могу проверить, на хостинге модуль Text::Iconv отсутствует, но похоже что это тоже не то.
не для рассылок смс, это из инстаграма
сам iconv есть? тогда#!/usr/bin/perl$text = '\u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439';
$text = `iconv -f java -t koi8-r << EOD
$text`;
print $text;а на хостинге по просьбе трудящихся ничего дополнительно не установят?
попросите их вежливо ))
> сам iconv есть? тогда#!/usr/bin/perl
> $text = '\u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439';
> $text = `iconv -f java -t koi8-r << EOD
> $text`;
> print $text;
> а на хостинге по просьбе трудящихся ничего дополнительно не установят?
> попросите их вежливо ))------------8<--------------------------------------
sh: line 1: warning: here-document at line 0 delimited by end-of-file (wanted `EOD')
iconv: conversion from `java' is not supported
Try `iconv --help' or `iconv --usage' for more information.
----------->8---------------------------------------
Спасибо, я уже решил проблему вызовом из перла sed+recode с помощью совета выше.
> Спасибо, я уже решил проблему вызовом из перла sed+recode с помощью совета
> выше.Не нужно вызывать sed+recode из Perl, это извращение в три процесса на строку.
my $text='\u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439';
$text =~ s/\\u(....)/chr hex $1/ge;
> my $text='\u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439';
> $text =~ s/\\u(....)/chr hex $1/ge;класс! это здо́рово! спасибо за пример использования chr и hex
тем самым получаем текст в utf8
если необходимо, то переводим полученный текст в нужную кодировку
например вот так в koi8-r
(не-не, я только перекодирование добавлю, петь и плясать не буду ☺ )#!/usr/bin/perluse Encode qw(encode decode);
$text='\u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439';
$text =~ s/\\u(....)/chr hex $1/ge;$text = Encode::encode('koi8-r', $text);
print $text;
на пальму первенства не претендую ))
> Подскажите пжста, как на перл перекодировать в читаемый вид уникод-строку типа \u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439s/\\u(....)/ pack 'U*', hex($1) /eg;