安全地将 unicode 字符串转换为可打印字符

安全地将 unicode 字符串转换为可打印字符

我有许多 HTML 文件,其中包含混合 unicode 字符串(如 )\303\243和可打印字符(如%s.我想做的是以安全的方式将 unicode 字符串转换为可打印字符。

我发现 GNU coreutils 中的 printf 会自动转换它们,但我前段时间也经历过惨痛的教训,如果您不知道要打印什么,则 printf 不值得信赖:

$ env printf "$(cat filename.htm)"
printf: %20M: invalid conversion specification

我也知道 bash 可以进行这样的转换,但我必须使用正则表达式循环文件,这根本不安全:

$ echo $'\303\243'
ã

有没有这样的命令行工具可以以干净、安全的方式处理这些文件?

答案1

如果文件没有其他反斜杠:

$ printf %b\\n 'aa\303\243'
aaã

如果这样做,您可以使用双反斜杠,后面不跟整数:

$ printf %b\\n "$(sed -E 's/\\/\\\\/g;s/\\(\\[0-7])/\1/g' <<< '\\a\na\303\243')"
\\a\naã

相关内容