这是我的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
答案 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...";