Perl unicode格式化问题

时间:2011-03-15 09:28:25

标签: perl unicode

为什么这个示例代码没有正常工作?

#/usr/bin/perl

$a = "aaa%29";
$a =~ s/%/\\x/g;
print "a  $a \n";
$b = "aaa\x29";
print "b  $b \n";
$c = sprintf($a);
print "c  $c \n";

我希望获得相同输出线的三倍。

3 个答案:

答案 0 :(得分:5)

对于第一个正则表达式,您可以使用:

$a = "aaa%29";
$a =~ s/%([0-9A-F]{2})/chr(hex($1))/gie;
print "a  $a \n";

我不知道你要用sprintf做什么。 (使用use warnings;-w作为perl的选项启用代码中的警告。sprintf调用无效。)

答案 1 :(得分:5)

如果您尝试解码网址,我猜您应该使用uri_unescape模块中的URI::Escape功能。

或使用类似s{%([0-9A-F]{2})}{chr(hex($1))}egi的内容。

答案 2 :(得分:1)

'“','\','x','2','9','”'是用于创建单字符字符串的字符串文字的Perl代码。

'\','x','2','9'是一个不同的序列,它永远不会传递给Perl解析器,更不用说了。此外,sprintf不会特别对待“\”。它知道的所有逃脱都以“%”开头。

这就是为什么你没有获得相同的输出。