2014-11-24 60 views
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 
+0

在第一個例子中,'$ string'包含你的shell作爲第一個參數傳入程序的內容。在第二個例子中,'$ string'包含'perldoc perlop'中定義的雙引號插值的結果。打印字符串的「未轉義」版本可能會提供信息。最後,我看不到需要轉義的字符串中的非ASCII字符。 – tjd 2014-11-24 20:35:25

回答

0

在第一個片段,您也將下列到$string輸出:

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

在第二個片段中,你屁股IGN以下至$string

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

在一個Perl雙引號字符串字面,\u導致下一個字符要大寫。你需要轉義\

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