エンコードされた文字が混在したテキストでできた長い行を含むファイルがあります。
%255D%252C%2522actualPage%2522%253A1%252C%2522rowPerPage%2522%253A50%257D%255D
各エンコーダー文字は %25xx
どこで xx
ASCII文字の16進値です(例: %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、ペイル
回答:
回答№1は0perl -pe "s/%25([0-9A-F][0-9A-F])/chr hex $1/ge" myfile.txt
出力
],"actualPage":1,"rowPerPage":50}]
回答№2の場合は3
おそらくあなたが欲しいのは URI::Encode
。これには正規表現よりもモジュールを使うほうが良いでしょう。
perl -MURI::Encode -nle"$u=URI::Encode->new(); print $u->decode($u->decode($_));"
入力文字列に対する出力は次のとおりです。
],"actualPage":1,"rowPerPage":50}]
お気づきのとおり、文字列は2回エンコードされていたため、2回デコードする必要がありました。%25
明らかにパーセント記号です %
)中間出力は
%5D%2C%22actualPage%22%3A1%2C%22rowPerPage%22%3A50%7D%5D
答え№3の2
perl -MURI::Escape -ne"print uri_unescape(uri_unescape($_))"