![如何在bash中从html页面转换特殊的十六进制字符?](https://linux22.com/image/74204/%E5%A6%82%E4%BD%95%E5%9C%A8bash%E4%B8%AD%E4%BB%8Ehtml%E9%A1%B5%E9%9D%A2%E8%BD%AC%E6%8D%A2%E7%89%B9%E6%AE%8A%E7%9A%84%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%E5%AD%97%E7%AC%A6%EF%BC%9F%20.png)
我有一个脚本可以处理来自网页的一些信息。我猜想由于页面编码的原因,一些特殊字符被编码为十六进制。例如,我有字符串“%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
有文档记录这里。