
Eu tenho muitos arquivos HTML contendo strings Unicode mistas \303\243
e 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ã