LINUX.ORG.RU

как на perl перекодировать строку вида «041F04300440043E04» в читабельные на консоли символы?


0

1

есть строка в виде «041F04300440043E04»

в которой по порядку идут в 16 ричке закодированные символы
041F первый символ, 0430 второй и т.д.
по ссылке http://unicode-table.com/ru/#greek-coptic находится поиск символа по 16 ричной строке
берем например два 16 ричных числа в виде строки 041F и видим что это символ русская П
Есть ли модуль для perl для преобразования таких строк в символы чтобы они на консоли (LANG=en_US.UTF-8) отображались нормально ?

★★★★

Юзай регвыры. Символ в юникод точно можно перегнать, строку врятли. Этож перл, кода на одну строчку.

actics
()
Ответ на: комментарий от actics

я конечно могу составить хэш в виде '041F' => 'П','0430'=>'а' и т.д. но не ужели это удобно-подходящий способ?

Vlad-76 ★★★★
() автор топика
Ответ на: комментарий от Vlad-76

Зачем хеш? Нужно погуглить, полюбому есть функция для перегона в utf-8. а дальше я бы сделал регэксп на замену.

actics
()
Ответ на: комментарий от actics

если есть функция перегона в utf-8 то для чего зачем делать «а дальше я бы сделал регэксп на замену»? символ для отображения будет уже или я что то не понимаю

Vlad-76 ★★★★
() автор топика
$ python3 -c "print(bytes.fromhex('041F04300440043E').decode('utf_16_be'))"
Паро
anonymous
()
Ответ на: комментарий от Vlad-76

У тебя строка бинарная, или именно строка? Если бинарная то тогда pack/unpack.
В перле в регекспы можно вставлять код, таким образом можно одним регвыром организовать перегон.

actics
()

решение

#!/usr/bin/perl

use Encode;
$a="041F04300440043E043B044C00200434043B044F0020005700690046006900200043006100660065005F004C0075006E00";
$decoded_a = pack "H*",$a;
Encode::from_to($decoded_a,'UTF-16BE','UTF-8');
printf "DECODED: $decoded_a\n";

Vlad-76 ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.