我正在尝试为所有可能的字节值打印代码点。
我的测试文件:
$ perl -e ' open($fh,">raw_bytes.dat");while($i++<256){ print $fh chr($i-1) } close($fh)'
$ ls -l raw_bytes.dat
-rw-rw-r--+ 1 uuuuu Domain Users 256 Mar 20 15:41 raw_bytes.dat
$
下面的#--->
部分应该包含什么内容,以便我以十六进制格式打印utf8 $ x的代码点?
perl -e ' use utf8; open($fh,"<raw_bytes.dat");binmode($fh);
while($rb=read($fh,$x,1)) { utf8::encode($x);
#--->
} '
我使用printf尝试了%02x,但是没有用。另外,我只需要使用核心模块的解决方案。
答案 0 :(得分:2)
使用unpack('H*')
:
$ perl -e '$x="\x80"; utf8::encode($x); print unpack("H*", $x), "\n"'
c280
对于我的示例文件,
$ perl -e 'open($fh, "<", "raw_bytes.dat"); binmode($fh);
while ($rb=read($fh,$x,1)) { utf8::encode($x);
print unpack("H*", $x), "\n";
}'
00
01
02
03
...
7f
c280
c281
c282
c283
...
c3bd
c3be
c3bf
变量:
$ perl -e '$x="\x80"; utf8::encode($x);
print uc(unpack("H*", $x)), "\n"'
C280
$ perl -e '$x="\x80"; utf8::encode($x);
($r = uc(unpack("H*", $x))) =~ s/(..)/\\X\1/g;
print "$r\n"'
\XC2\X80
# a little bit pointless example, but assume that $x is a provided Perl scalar....
$ perl -e '$x="\N{U+0080}\N{U+0081}";
printf("U+%04x ", ord($_)) foreach(split(//, $x));
print "\n";'
U+0080 U+0081
请记住两者之间的区别
split(//)
返回个八位字节,例如\x80
split(//)
返回字符,例如\N{U+0080}
答案 1 :(得分:2)
我使用printf尝试了%02x,但是没有用。
您可以使用
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
矢量标志
此标志告诉Perl将提供的字符串解释为 整数,字符串中每个字符一个。 Perl应用 依次将格式设置为每个整数,然后使用 分隔符(默认为点。)。这对于显示很有用 任意字符串中字符的序数值。