[linux-l] quoted printable dekodieren

Boris Kirkorowicz borisbelug at kirk.de
Do Jul 8 12:44:42 CEST 2021


Hallo,

Am 08.07.21 um 10:57 schrieb Stefan Krusche via linux-l:
> 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.

$line enthält doch nur die eingelesene Zeile, nicht ein Verzeichnis oder
Dateien → ??


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

Zumindest funktioniert es auf der Kommandozeile.


>>> 	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"

Das könnte ich natürlich auch mal probieren. Auf das zeilenweise
Verarbeiten bin ich verfallen, auch weil die Definition von QP eine
relativ kurze maximale Zeilenlänge vorschreibt, die jedenfalls deutlich
kürzer ist als die ganze Datei.


-- 
Mit freundlichem Gruß                                 Best regards
                                 Kirkorowicz


Mehr Informationen über die Mailingliste linux-l