Converta com segurança strings Unicode em caracteres imprimíveis

Converta com segurança strings Unicode em caracteres imprimíveis

Eu tenho muitos arquivos HTML contendo strings Unicode mistas \303\243e caracteres imprimíveis como %s. O que eu gostaria de fazer é converter as strings Unicode em caracteres imprimíveis de maneira segura.

Descobri que printf do GNU coreutils os converte automaticamente, mas também aprendi da maneira mais difícil há algum tempo que printf não é confiável se você não sabe o que será impresso:

$ env printf "$(cat filename.htm)"
printf: %20M: invalid conversion specification

Eu também sei que o bash pode fazer conversões como esta, mas eu teria que percorrer o arquivo com um regex, o que não é nada seguro:

$ echo $'\303\243'
ã

Existe uma ferramenta de linha de comando que possa processar esses arquivos de maneira limpa e segura?

Responder1

Se os arquivos não tiverem outras barras invertidas:

$ printf %b\\n 'aa\303\243'
aaã

Se o fizerem, você poderá dobrar barras invertidas que não sejam seguidas por números inteiros:

$ printf %b\\n "$(sed -E 's/\\/\\\\/g;s/\\(\\[0-7])/\1/g' <<< '\\a\na\303\243')"
\\a\naã

informação relacionada