Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在perl中以原始字节十六进制形式打印字符串?_Perl_Encoding - Fatal编程技术网

如何在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