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