Bash
安全地將 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' ã
有沒有這樣的命令行工具可以乾淨安全地處理這些文件?
如果文件沒有其他反斜杠:
$ 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ã