The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Преобразование уникода"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Perl)
Изначальное сообщение [ Отслеживать ]

"Преобразование уникода"  –1 +/
Сообщение от abutemail (ok), 18-Фев-17, 18:47 
Подскажите пжста, как на перл перекодировать в читаемый вид уникод-строку типа \u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Преобразование уникода"  +/
Сообщение от михалыч (ok), 19-Фев-17, 05:06 
> Подскажите пжста, как на перл перекодировать в читаемый вид уникод-строку типа \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
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Преобразование уникода"  +/
Сообщение от abutemail (ok), 19-Фев-17, 10:56 
>> Подскажите пжста, как на перл перекодировать в читаемый вид уникод-строку типа \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),  но в читабельном виде, в строке на самом деле слово "Люберецкий", а ваш скрипт выдает видимо количество символов в строке :).

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Преобразование уникода"  +/
Сообщение от PavelR (??), 19-Фев-17, 11:01 

Чтобы вывести текст надо вывести измененное содержимое переменной $text.

print $text;

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Преобразование уникода"  +/
Сообщение от Andrey Mitrofanov (?), 19-Фев-17, 11:52 
> #!/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..

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Преобразование уникода"  +/
Сообщение от PavelR (ok), 19-Фев-17, 11:53 

Да, чего-то не подходит. )

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Преобразование уникода"  +1 +/
Сообщение от Andrey Mitrofanov (?), 19-Фев-17, 11:54 
> Люберецкий
> $ _
> --- sed '/g ; s/, //'|recode u2/x2..

--агхр sed 's/\\u/, 0x/g ; s/, //'|recode u2/x2..

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

8. "Преобразование уникода"  –1 +/
Сообщение от abutemail (ok), 19-Фев-17, 12:10 
>> Люберецкий
>> $ _
>> --- sed '/g ; s/, //'|recode u2/x2..
> --агхр sed 's/\\u/, 0x/g ; s/, //'|recode u2/x2..

да хотелось бы именно на перл и без вызова внешних программ.
На питоне в 2 строчки делается, а на перле чет не могу найти работающего решения(

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

11. "Преобразование уникода"  +/
Сообщение от abutemail (ok), 22-Фев-17, 15:22 
>> Люберецкий
>> $ _
>> --- 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
Люберецкий

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

12. "Преобразование уникода"  +/
Сообщение от Andrey Mitrofanov (?), 22-Фев-17, 16:35 
>>> --- sed '/g ; s/, //'|recode u2/x2..
>> --агхр sed 's/\\u/, 0x/g ; s/, //'|recode u2/x2..
> Спасибо, пришлось все же воспользоваться Вашим решением,

|-D  "Ещё долго седые опенетовцы рассказывли детям предания, как Митрофанов заборол перлы-питоны-повершелы одним ядрёным баш-сед-фу."

> единственно что для recode добавил флаг f, иначе ошибка "recode: Ambiguous output

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

7. "Преобразование уникода"  +/
Сообщение от михалыч (ok), 19-Фев-17, 11:57 
> Чтобы вывести текст надо вывести измененное содержимое переменной $text.
> print $text;

да конечно! посыпаю голову пеплом ))

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

9. "Преобразование уникода"  +/
Сообщение от михалыч (ok), 19-Фев-17, 20:52 
>>> Подскажите пжста, как на перл перекодировать в читаемый вид уникод-строку типа \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/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 или это не для рассылок смс?)

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

10. "Преобразование уникода"  +/
Сообщение от abutemail (ok), 22-Фев-17, 15:19 
> виноват, исправляюсь ))
#!/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 отсутствует, но похоже что это тоже не то.

не для рассылок смс, это из инстаграма

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

13. "Преобразование уникода"  +/
Сообщение от михалыч (ok), 22-Фев-17, 20:16 
сам 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;

а на хостинге по просьбе трудящихся ничего дополнительно не установят?
попросите их вежливо ))

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

14. "Преобразование уникода"  +/
Сообщение от abutemail (ok), 22-Фев-17, 20:45 
> сам 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 с помощью совета выше.

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "Преобразование уникода"  +1 +/
Сообщение от ACCA (ok), 01-Мрт-17, 22:02 
> Спасибо, я уже решил проблему вызовом из перла sed+recode с помощью совета
> выше.

Не нужно вызывать sed+recode из Perl, это извращение в три процесса на строку.

my $text='\u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439';
$text =~ s/\\u(....)/chr hex $1/ge;

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

16. "Преобразование уникода"  +/
Сообщение от михалыч (ok), 06-Мрт-17, 09:58 
> 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/perl

use 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;


на пальму первенства не претендую ))
Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

17. "Преобразование уникода"  +/
Сообщение от Аноним (17), 11-Июл-18, 21:37 
> Подскажите пжста, как на перл перекодировать в читаемый вид уникод-строку типа \u041b\u044e\u0431\u0435\u0440\u0435\u0446\u043a\u0438\u0439

s/\\u(....)/ pack 'U*', hex($1) /eg;

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру