在linux shell中,如果我perl -e "print '\x6f\xe3\xff\xff\xff\x7f' x 10"
,则输出为:
\ x6f \ XE3 \ XFF \ XFF \ XFF \ 0x7F部分\ x6f \ XE3 \ XFF \ XFF \ XFF \ 0x7F部分\ x6f \ XE3 \ XFF \ XFF \ XFF \ 0x7F部分\ x6f \ XE3 \ XFF \ XFF \ XFF \ 0x7F部分\ x6f \ XE3 \ XFF \ XFF \ XFF \ 0x7F部分\ x6f \ XE3 \ XFF \ XFF \ XFF \ 0x7F部分\ x6f \ XE3 \ XFF \ XFF \ XFF \ 0x7F部分\ x6f \ XE3 \ XFF \ XFF \ XFF \ 0x7F部分\ x6f \ xe3 \ xff \ xff \ xff \ x7f \ x6f \ xe3 \ xff \ xff \ xff \ x7f
但我需要的是\x6f\xe3\xff\xff\xff\x7f
的ascii字符串,如何制作呢?
答案 0 :(得分:3)
\x6f
之类的转义序列仅在双引号字符串中展开。你有一个单引号字符串。在示例中反转引号的使用(我还添加了-CS
以使字符正确打印):
$ perl -CS -e 'print "\x6f\xe3\xff\xff\xff\x7f" x 10'
oãÿÿÿoãÿÿÿoãÿÿÿoãÿÿÿoãÿÿÿoãÿÿÿoãÿÿÿoãÿÿÿoãÿÿÿoãÿÿÿ
更新: perlrun manual page解释了各种Perl命令行开关。
-C
开关控制各种Unicode功能。 -CS
是告诉Perl三个标准文件句柄(STDIN,STDOUT和STDERR)应被视为提供或期望UTF8编码数据流的快速方法。这意味着从STDIN读取的任何内容都将从UTF8解码为Perl字符,发送到STDOUT或STDERR的任何内容都将从Perl字符编码为UTF8。在这种情况下,我只需要-CI
(仅将该转换应用于STDOUT),但我养成了一起处理所有三个文件句柄的习惯。