0
这里是我的Perl代码:PERL Unicode转义字符串命令行参数传递错误的输出
use Unicode::Escape;
my $string = shift;
print Unicode::Escape::escape($string) . "\n";
当我从终端执行该脚本的Unicode是无法逃避
perl的unicode_escape.pl“https://docs.google.com/uc?id \ u003d0ByPZe438mUkZVkNfTHZLejFLcnc \ u0026export \ u003ddownload \ u0026revid \ u003d0ByPZe438mUkZbUIxRkYvM2dwbVduRUxSVXNERm0zZFFiU2c0PQ”
输出:
https://docs.google.com/uc?id\u003d0ByPZe438mUkZVkNfTHZLejFLcnc\u0026export\u003ddownload\u0026revid\u003d0ByPZe438mUkZbUIxRkYvM2dwbVduRUxSVXNERm0zZFFiU2c0PQ
但当串是码
use Unicode::Escape;
my $string = "https://docs.google.com/uc?id\u003d0ByPZe438mUkZVkNfTHZLejFLcnc\u0026export\u003ddownload\u0026revid\u003d0ByPZe438mUkZbUIxRkYvM2dwbVduRUxSVXNERm0zZFFiU2c0PQ";
print Unicode::Escape::escape($string) . "\n";
里面,当我执行脚本
perl unicode_escape.pl
它产生正确输出
输出
https://docs.google.com/uc?id003d0ByPZe438mUkZVkNfTHZLejFLcnc0026export003ddownload0026revid003d0ByPZe438mUkZbUIxRkYvM2dwbVduRUxSVXNERm0zZFFiU2c0PQ
我不明白perl如何决定这么做?请帮助
UPDATE:
嗨,池上 我试过,但仍不能在这里工作是我的代码:
use Unicode::Escape;
my $string = shift;
$string =~ s/\\/\\\\/g;
print Unicode::Escape::escape($string) . "\n";
我试图产生输出同为第二代码片段。
我想要做的是当我运行这个命令就像在第一个代码片段。
perl unicode_escape.pl "https://docs.google.com/uc?id\u003d0ByPZe438mUkZVkNfTHZLejFLcnc\u0026export\u003ddownload\u0026revid\u003d0ByPZe438mUkZbUIxRkYvM2dwbVduRUxSVXNERm0zZFFiU2c0PQ"
应该给予同样作为第二代码段
输出
https://docs.google.com/uc?id003d0ByPZe438mUkZVkNfTHZLejFLcnc0026export003ddownload0026revid003d0ByPZe438mUkZbUIxRkYvM2dwbVduRUxSVXNERm0zZFFiU2c0PQ
在第一个例子中,'$ string'包含你的shell作为第一个参数传入程序的内容。在第二个例子中,'$ string'包含'perldoc perlop'中定义的双引号插值的结果。打印字符串的“未转义”版本可能会提供信息。最后,我看不到需要转义的字符串中的非ASCII字符。 – tjd 2014-11-24 20:35:25