PERL Unicode Escape字符串从命令行参数传递错误输出

时间:2014-11-24 19:28:08

标签: perl unicode escaping

这是我的perl代码:

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如何决定这样做?请帮忙

更新

嗨,池上 我尝试了这个,但仍然无法在这里工作是我的代码:

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

1 个答案:

答案 0 :(得分:0)

在第一个代码段中,您将以下内容分配给$string

https://docs.google.com/...download\u0026revid...

在第二个代码段中,您将以下内容分配给$string

https://docs.google.com/...download0026revid...

在Perl双引号字符串文字中,\u导致下一个字符为大写字母。您需要转义\

my $string = "https://docs.google.com/...download\\u0026revid...";