
\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ã