Как распечатать последовательность символов (шестнадцатеричный) как символы UTF8 в Perl? - PullRequest
1 голос
/ 21 марта 2019

У меня есть переменная в Perl, которая представляет собой последовательность букв и цифр:

my $var = "48656c6c6f20576f726c64";

Последовательность представляет собой строку Hello World.

т.е. это можно представить как 0x48 0x65 0x6c 0x6c 0x6f 0x20 0x57 0x6f 0x72 0x6c 0x64, шестнадцатеричное представление Hello World.

Как мне распечатать $var как читаемый UTF8?

Коротко: Как мне распечатать Hello World?

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

Чтобы получить текст:

use Encode qw( decode_utf8 );

my $hex   = "48656c6c6f20576f726c64";
my $bytes = pack('H*', $hex);
my $text  = decode_utf8($bytes);

Чтобы напечатать его:

use feature qw( say );
use open ':std', ':encoding(UTF-8)';

say $text;
1 голос
/ 21 марта 2019

С pack

print pack("H*", $var);

или если данные действительно имеют кодировку UTF-8 после их декодирования

use Encode;
print Encode::decode("UTF-8", pack("H*", $var));
...