如何在perl中以原始字节十六进制形式打印字符串?
例如,我有以下脚本如何在perl中以原始字节十六进制形式打印字符串?,perl,encoding,Perl,Encoding,例如,我有以下脚本 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中设置),如下所示: 涓? 中 但我想输出的是
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中的哪个函数?非常感谢您提供各种解决方案。他们有用!嗨,池上。我更新了我的帖子。我还发现了一些问题。你有时间看一下吗?在更新时,你会得到奇怪的结果,因为
$octets
(0x4E2D)中的字符不是八位字节;这是一个Unicode代码点,也不是UTF-16。中代码>将是“\x4E\x2D”
或“\x2D\x4E”
,而不是“\x{4E2D}”
好的,谢谢。因此,当使用utf8
时,$octects实际上包含unicode代码点。但是我发现当print$octects
时,perl发送给CMD的又是UTF-8编码字符串,例如,当CMD设置为cp936时,print$octects
给出涓?代码>,为什么?为什么perl不将原始代码点十六进制字节发送到CMD?非常感谢您提供的各种解决方案。他们有用!嗨,池上。我更新了我的帖子。我还发现了一些问题。你有时间看一下吗?在更新时,你会得到奇怪的结果,因为$octets
(0x4E2D)中的字符不是八位字节;这是一个Unicode代码点,也不是UTF-16。中代码>将是“\x4E\x2D”
或“\x2D\x4E”
,而不是“\x{4E2D}”
好的,谢谢。因此,当使用utf8
时,$octects实际上包含unicode代码点。但是我发现当print$octects
时,perl发送给CMD的又是UTF-8编码字符串,例如,当CMD设置为cp936时,print$octects
给出涓?代码>,为什么?为什么perl不将原始代码点十六进制字节发送到CMD?如果有新问题要问,请作为新问题问。如果有新问题要问,请作为新问题问。
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