如何在 perl 中以原始字节十六进制形式打印字符串



例如,我有以下脚本

use utf8;
use strict;
use warnings;
use feature 'say';
use Encode qw(decode encode);
my $s = "中";
my $octets = encode("UTF-8", $s);
say $octets;
$octets = encode("cp936", $s);
say $octets;

它在 Windows CMD(在 CP936 中设置)中输出如下:

涓?
中

但是我想输出的是十六进制形式的原始字节,例如,像这样

E4B8AD   # 中 encoded in utf8
D6D0     # 中 encoded in GBK

这个原始字节输出 perl 中的哪个函数?

sprintf '%v02X', $octets                                    # E4.B8.AD
unpack 'H*', $octets                                        # e4b8ad
uc unpack 'H*', $octets                                     # E4B8AD
join ' ', map sprintf('%02X', $_), unpack 'C*', $octets     # E4 B8 AD
join ' ', map sprintf('%02X', ord($_)), split //, $octets   # E4 B8 AD

最新更新