我有一个文件,其中包含由编码字符混合的长行。
%255D%252C%2522actualPage%2522%253A1%252C%2522rowPerPage%2522%253A50%257D%255D
每个编码器字符为%25xx
,其中xx
是ascii字符的hexa值(例如%2540 = @
)
我尝试了以下但没有成功
perl -pe 's/%25([0-9A-F](0-9A-F])/\x$1/' myfile.txt
perl -pe 's/%25([0-9A-F](0-9A-F])/chr($1)/' myfile.txt
你有什么线索吗?
TIA,Peyre
答案 0 :(得分:3)
也许你想要的是URI::Encode
。使用模块比使用正则表达式更好。
perl -MURI::Encode -nle'$u=URI::Encode->new(); print $u->decode($u->decode($_));'
输出是您的输入字符串:
],"actualPage":1,"rowPerPage":50}]
正如您将注意到的,字符串必须被解码两次,因为它已被编码两次(%25
显然是百分号%
)。临时产出是
%5D%2C%22actualPage%22%3A1%2C%22rowPerPage%22%3A50%7D%5D
答案 1 :(得分:2)
perl -MURI::Escape -ne'print uri_unescape(uri_unescape($_))'
答案 2 :(得分:0)
perl -pe 's/%25([0-9A-F][0-9A-F])/chr hex $1/ge' myfile.txt
输出
],"actualPage":1,"rowPerPage":50}]