Hallo Leute,
ich muss für ein Projekt ein Programm in Python schreiben.
Als einer der ersten Schritte muss ich Dateien einlesen (.eml) und einige Zeilen daraus extrahieren.
Klappt auch mit einer kleinen for-Schleife.
Einziges Problem dabei ist, dass ich die Zeichenketten nicht vernünftig decodiert kriege.
Der Header der Emails sieht wie folgt aus:
Ein einfaches einlesen mit UTF-8 als Codierung funktioniert leider nicht. Dann ist weiterhin alles "quoted-printable", also alle Sonderzeichen mit =xx ersetzt und das '=' mit =3D ersetzt.
[src=python]import codecs
import quopri
from email import quoprimime
def load(filename):
file = codecs.open(filename, "r", "utf-8");
# file = open(filename)
#
dec_file = ""
lines = ""
for line in file:
lines += line
#
dec_file = quopri.decodestring(lines)
# dec_file = quoprimime.decode(lines)
#
#
print dec_file[/src]
Damit sind zwar die '=' wieder in Ordnung, aber die Umlaute sind "kaputt"
Gibt es da eine Möglichkeit das vernünftig zu machen oder muss ich mir die entsprechenden Ersetzungen durch dieses quoted-printable raussuchen und selbstständig ersetzten lassen?
ich muss für ein Projekt ein Programm in Python schreiben.
Als einer der ersten Schritte muss ich Dateien einlesen (.eml) und einige Zeilen daraus extrahieren.
Klappt auch mit einer kleinen for-Schleife.
Einziges Problem dabei ist, dass ich die Zeichenketten nicht vernünftig decodiert kriege.
Der Header der Emails sieht wie folgt aus:
(Sterne ersetzten diverse sensible Daten)Return-Path: <*>
Received: from * (*)
by * (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
Sun, 29 Mar 2015 16:16:14 +0200
X-Sieve: CMU Sieve 2.4
Received: from * ([*] helo=*)
by * with esmtps (TLS1.0HE_RSA_AES_256_CBC_SHA1:256)
(Exim 4.80 nylar)
id 1YcE0b-0006Li-NL
for *; Sun, 29 Mar 2015 16:16:13 +0200
To: * <*>
Subject: Betreff
From: * <*>
ReplyTo: * <*>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Date: Sun, 29 Mar 2015 16:16:11 +0200 (CEST)
Message-Id: <*>
X-IMT-Spam-Score: 0.8 ()
X-PMX-Version: 6.2.0.2453472, Antispam-Engine: 2.7.2.2107409, Antispam-Data: 2015.3.29.140620
X-PerlMx-Spam: Gauge=IIIIIIII, Probability=8%, Report='
FROM_NAME_ONE_WORD 0.05, HTML_00_01 0.05, HTML_00_10 0.05, SUPERLONG_LINE 0.05, URI_ENDS_IN_HTML 0, __ANY_URI 0, __CANPHARM_UNSUB_LINK 0, __CP_URI_IN_BODY 0, __CT 0, __CTE 0, __CT_TEXT_PLAIN 0, __FRAUD_INTRO 0, __HAS_FROM 0, __HAS_MSGID 0, __HIGHBITS 0, __MIME_TEXT_ONLY 0, __SANE_MSGID 0, __STOCK_PHRASE_7 0, __TO_MALFORMED_2 0, __URI_NS '
X-IMT-Authenticated-Sender:
Ein einfaches einlesen mit UTF-8 als Codierung funktioniert leider nicht. Dann ist weiterhin alles "quoted-printable", also alle Sonderzeichen mit =xx ersetzt und das '=' mit =3D ersetzt.
[src=python]import codecs
import quopri
from email import quoprimime
def load(filename):
file = codecs.open(filename, "r", "utf-8");
# file = open(filename)
#
dec_file = ""
lines = ""
for line in file:
lines += line
#
dec_file = quopri.decodestring(lines)
# dec_file = quoprimime.decode(lines)
#
#
print dec_file[/src]
Damit sind zwar die '=' wieder in Ordnung, aber die Umlaute sind "kaputt"
und so weiter ...ü = ü, ° = °
Gibt es da eine Möglichkeit das vernünftig zu machen oder muss ich mir die entsprechenden Ersetzungen durch dieses quoted-printable raussuchen und selbstständig ersetzten lassen?