パーセントでエンコードされたすべてのUTF-8サブストリングを通常のUTF-8テキストに置き換えるにはどうすればよいですか?

パーセントでエンコードされたすべてのUTF-8サブストリングを通常のUTF-8テキストに置き換えるにはどうすればよいですか?

URLに%エンコードされたUTF-8テキストを含むHTMLファイルがあります。

たとえば、「%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B」は、「ресурсы」(ロシア語で「リソース」)を意味します。

アクションは、これらのすべての部分文字列を読み取り可能なUTF-8テキストに置き換えることです。

%作業を簡素化するために、ファイルに他のシンボルの使用がないことを考慮することができます。英数字は大文字でも小文字でもかまいません。

sed私はこれが、または何かを使用してエレガントに行うことができると思いますperlが、awk方法はわかりません。

このWebアプリケーションそこに貼り付けたテキストを使うと効果があるようです。

答え1

一部のシステムで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}

最初の命令の直後ではありません。

答え2

パールの使用:

perl -pe 's/%([0-9A-F]{2})/pack"H2",$1/gei'

または以下を使用してURI::Escape

perl -MURI::Escape -pe '$_=uri_unescape$_'

答え3

助けることができるプログラムがありますconvmv

.itを使用すると、convmv --unescape /some_path/target_fileテスト実行が行われます。

ご確認の上、継続をご利用くださいconvmv --notest --unescape /some_path/target_file

プログラムのホームページは次のとおりです。http://j3e.de/linux/convmv/

関連情報