ユニコード文字列を印刷可能な文字に安全に変換する

ユニコード文字列を印刷可能な文字に安全に変換する

\303\243のような Unicode 文字列と のような印刷可能な文字が混在する HTML ファイルがたくさんあります%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ã

関連情報