如何在bash中从html页面转换特殊的十六进制字符?

如何在bash中从html页面转换特殊的十六进制字符?

我有一个脚本可以处理来自网页的一些信息。我猜想由于页面编码的原因,一些特殊字符被编码为十六进制。例如,我有字符串“%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有文档记录这里

相关内容