我有一个脚本可以处理来自网页的一些信息。我猜想由于页面编码的原因,一些特殊字符被编码为十六进制。例如,我有字符串“%2f”,应翻译为“/”。
在 bash 中,如何将这些十六进制特殊字符转换为 ASCII?有任何想法吗?
答案1
Bash 有一个printf
内置函数,它与我们在 C 中学习的内容大致相同。语法略有不同。
printf '\x2f'
如果你不需要担心更高级别的数据一致性问题,你可以简单地通过这个函数转换一个url:
function deUrl() {
printf "${1//%/\\x}"
}
(它将 every 转换%
为 a \x
,然后用 printf 打印它。)
答案2
此类实体可以使用以下 python 单行代码进行解码:
$ 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
有文档记录这里。