我在Perl中有一个变量,它只是一个字母和数字的序列:
最初的回答:
my $var = "48656c6c6f20576f726c64";
该序列代表字符串
Hello World
。也就是说,可以将其视为
Hello World
的十六进制表示形式0x48 0x65 0x6c 0x6c 0x6f 0x20 0x57 0x6f 0x72 0x6c 0x64
。如何将
$var
作为可读的UTF8打印出来?简短地说:如何打印
Hello World
?最初的回答。
要获取文本:
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;
pack
函数。最初的回答。print pack("H*", $var);
use Encode;
print Encode::decode("UTF-8", pack("H*", $var));
binmode STDOUT,": utf8";
。我有一些“宽字符”。 - undefined:utf8
。正确的写法是binmode STDOUT, ":encoding(UTF-8)";
,而且你还应该对 STDIN 和 STDERR 做同样的处理。使用use open ':std', ':encoding(UTF-8)';
可以一次性完成所有操作。 - undefined