Unicode-Zeichenfolgen sicher in druckbare Zeichen konvertieren

Unicode-Zeichenfolgen sicher in druckbare Zeichen konvertieren

Ich habe viele HTML-Dateien, die gemischte Unicode-Zeichenfolgen wie \303\243und druckbare Zeichen wie enthalten %s. Ich möchte die Unicode-Zeichenfolgen auf sichere Weise in druckbare Zeichen umwandeln.

Ich habe festgestellt, dass printf von GNU Coreutils sie automatisch konvertiert, musste aber vor einiger Zeit auch auf die harte Tour lernen, dass printf nicht vertrauenswürdig ist, wenn man nicht weiß, was gedruckt werden soll:

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

Ich weiß auch, dass Bash solche Konvertierungen durchführen kann, aber ich müsste die Datei mit einem regulären Ausdruck durchlaufen, was überhaupt nicht sicher ist:

$ echo $'\303\243'
ã

Gibt es ein solches Befehlszeilentool, das diese Dateien sauber und sicher verarbeiten kann?

Antwort1

Wenn die Dateien keine anderen Backslashes haben:

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

Wenn dies der Fall ist, können Sie doppelte Backslashes verwenden, denen keine Ganzzahlen folgen:

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

verwandte Informationen