Bash

安全地將 unicode 字元串轉換為可列印字元

  • April 14, 2013

我有許多 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ã

引用自:https://unix.stackexchange.com/questions/72360