
Ich habe viele HTML-Dateien, die gemischte Unicode-Zeichenfolgen wie \303\243
und 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ã