Webページの一部の情報を処理するスクリプトがあります。ページエンコーディングにより、一部の特殊文字が16進数でエンコードされているようです。たとえば、「/」に翻訳する必要がある文字列「%2f」があります。
bashでこれらの16進特殊文字をASCIIに変換するにはどうすればよいですか?どんなアイデアがありますか?
答え1
printf
Bashには、Cで学んだのとほぼ同じ組み込み機能があります。構文が若干異なります。
printf '\x2f'
より高いレベルのデータ整合性の問題を心配する必要がない場合は、次の関数を使用してURLを簡単に変換できます。
function deUrl() {
printf "${1//%/\\x}"
}
%
(すべてをaに変換し\x
てからprintfで印刷します。)
答え2
これらのエンティティは、次のPython one-linerを使用してデコードできます。
$ python -c "import urllib, sys; print urllib.unquote(sys.argv[1])" "%2f"
/
コードは単一文字に限定されません。より複雑な文字列を受け入れます。
$ python -c "import urllib, sys; print urllib.unquote(sys.argv[1])" "%2d and %2f"
- and /
Pythonのurllib.unquote
文書化ここ。