Безопасное преобразование строк Unicode в печатные символы

Безопасное преобразование строк Unicode в печатные символы

У меня есть много HTML-файлов, содержащих смешанные строки юникода, такие как \303\243и печатные символы, такие как %s. Я хотел бы преобразовать строки юникода в печатные символы безопасным способом.

Я обнаружил, что printf из GNU coreutils преобразует их автоматически, но некоторое время назад я также на собственном горьком опыте узнал, что 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ã

Связанный контент