[linux-l] quoted printable dekodieren

Stefan Krusche linux at stefan-krusche.de
Do Jul 8 10:57:06 CEST 2021


Am Donnerstag, 8. Juli 2021 schrieb Boris Kirkorowicz via linux-l:
> Hallo,
>
> Am 08.07.21 um 01:39 schrieb Frank Reker via linux-l:
> > Am Mi 07. Jul 2021 15:40 +0200 schrieb Ralph Angenendt via linux-l:
> >> echo "=C3=84lles m=C3=ABt =C3=9Cml=C3=A4=C3=BCten" | python -m
> >> quopri -d
> >
> > oder mit recode:
> > echo "=C3=84lles m=C3=ABt =C3=9Cml=C3=A4=C3=BCten" | recode
> > utf-8/quoted-printable..utf-8
>
> das habe ich sogleich auch noch ausprobiert, stoße damit jedoch auf
> ein Problem. Auf der Kommandozeile funktioniert es, auch in der
> Sequenz
>
> > line='=C3=84lles m=C3=ABt =C3=9Cml=C3=A4=C3=BCten'
> > newline=$(echo $line | recode utf-8/quoted-printable..utf-8)
> > echo $newline
>
> Aber in meinem Script erzeugt es die Fehlermeldung
>
> > recode: Ungültige Eingabe bei Schritt »Quoted-Printable..data«
>
> In der resultieren Datei findet sich kein einziger Umlaut, dafür
> etliche leere Zeilen. Vermutlich werden Zeilen, die dekodiert einen
> Umlaut enthalten, einfach leer ausgegeben. Das ist für mich umso
> erstaunlicher, da die Ausführung des Beispiels auf der Kommandozeile
> funktioniert.
>
> Irgendeine Idee dazu?
>
> Ach ja, der Kern meines Scriptes liest sich so:
> > cat $file | while read line
> > do
> > 	# newline=$(php -r 'echo
> > quoted_printable_decode("'"$line"'")."\n";') # newline=$(echo $line
> > | python -m quopri -d)
> > 	newline=$(echo $line | recode utf-8/quoted-printable..utf-8)
                       ^^^^^ zitieren -- ^^^^^^^^^^^^^^^^^^^^^^^^^^ Syntax?!
Wenn "$line" z.B. ein '*' enthielte, würden die Dateien aus dem Arbeits-
verzeichnis gelistet, dh. eingefügt werden.

Ich habe info recode nicht genauer studiert, aber bist Du sicher, daß 
die Syntax (s.o.) richtig ist?!

> > 	echo $newline >> $outfile
> > done
>
> Am Rande: das Script mit benötigt mit recode 3 Minuten, 3 Sekunden.

Vielleicht wird es ohne cat/subshell schneller:

while read ..; do ..; done < "$file" >> "$outfile"

Wenn es keinen zwingenden Grund gibt, könntest Du nicht die Datei direkt
an recode geben, ohne sie in der while..do..done Schleife mit read Zeile
für Zeile zu verarbeiten?!

recode ... "$file" >> "$outfile"

Hdh

Freundliche Grüße,
Stefan


Mehr Informationen über die Mailingliste linux-l