Text-Processing

如何用純 UTF-8 文本替換所有百分比編碼的 UTF-8 子字元串?

  • November 21, 2016

我有一個 html 文件,在 URL 中有很多 % 編碼的 UTF-8 文本。

例如“%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B”代表“ресурсы”(俄語中的“資源”)。

任務是用可讀的 UTF-8 文本替換所有此類子字元串。

為了簡化任務,我們可以考慮文件中沒有其他%符號用法。字母數字既可以是大寫也可以是小寫。

我懷疑這可以用 , 或其他東西優雅地完成sedperlawk不知道如何。

這個 Web 應用程序似乎可以使用您粘貼到那裡的文本來解決問題。

使用 bash、zsh、GNU echo 或某些系統上的某些 ksh 實現,只需echo -e將 all 替換%\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命令支持的選項之一)

正如@JoshLee 還指出的那樣,可以通過直接使用來避免“迴聲警告”:

printf ${url_encoded_string//%/\\x}

而是直接在第一個命令後面。

引用自:https://unix.stackexchange.com/questions/57519