Iva*_*van 9 character-encoding text-processing unicode text
我有一个 html 文件,在 URL 中有很多 % 编码的 UTF-8 文本。
例如“%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B”代表“???????” (俄语中的“资源”)。
任务是用可读的 UTF-8 文本替换所有此类子字符串。
为了简化任务,我们可以考虑%
文件中没有其他符号用法。字母数字可以是大写也可以是小写。
我怀疑这可以用优雅来完成sed
,perl
,awk
或东西,但不知道怎么办。
这个网络应用程序似乎可以通过粘贴在那里的文本来解决问题。
使用 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: ???????
Run Code Online (Sandbox Code Playgroud)
(它假定字符串本身不包含反斜杠字符并且不是您的echo
命令支持的选项之一)
正如@JoshLee 还指出的那样,可以通过直接使用来避免“回声警告”:
printf ${url_encoded_string//%/\\x}
Run Code Online (Sandbox Code Playgroud)
而是直接在第一个命令后面。
使用 perl:
perl -pe 's/%([0-9A-F]{2})/pack"H2",$1/gei'
Run Code Online (Sandbox Code Playgroud)
或与URI::Escape
:
perl -MURI::Escape -pe '$_=uri_unescape$_'
Run Code Online (Sandbox Code Playgroud)