URLに%エンコードされたUTF-8テキストがたくさん含まれているhtmlファイルがあります。
たとえば、「%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B」は「ресурсы」(ロシア語で「resources」)を表します。
タスクは、そのようなすべての部分文字列を読み取り可能なUTF-8テキストに置き換えることです。
タスクを単純化するために、ファイルには他の%
記号の使用法はないと見なすことができます。文字の数字は大文字と小文字の両方にすることができます。
これはsed
、Perl
、awk
などでエレガントに実行できると思いますが、方法がわかりません。
このWebアプリケーション そこに貼り付けたテキストでうまくいくようです。
Bash、zsh、GNU echo、または一部のシステムでのkshの実装では、すべてのecho -e
を%
に置き換えた後、\x
で簡単にデコードできます。 。
url_encoded_string="%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B"
temp_string=${url_encoded_string//%/\\x}
printf '%s\n' "$temp_string"
# output: \xD1\x80\xD0\xB5\xD1\x81\xD1\x83\xD1\x80\xD1\x81\xD1\x8B
echo -e "$temp_string"
# output: ресурсы
(文字列自体に円記号が含まれておらず、echo
コマンドでサポートされているオプションの1つではないことを前提としています)
@JoshLeeも指摘しているように、「エコーの警告」は、以下を直接使用することで回避できます。
printf ${url_encoded_string//%/\\x}
代わりに、最初のコマンドのすぐ後ろにあります。
Perlの場合:
Perl -pe 's/%([0-9A-F]{2})/pack"H2",$1/gei'
またはURI::Escape
:
Perl -MURI::Escape -pe '$_=uri_unescape$_'
あなたを助けることができるconvmv
と呼ばれるプログラムがあります。
convmv --unescape /some_path/target_file
を使用するだけです。ドライランを行います。
確認したら、convmv --notest --unescape /some_path/target_file
を使用して続行します。
このプログラムのホームページは次のとおりです。 http://j3e.de/linux/convmv/