安全地將 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ã

相關內容