Laden...

Encoding Problem iso-8859-1 bei E-Mail abruf mit imapX

Erstellt von Sythus vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.560 Views
Thema geschlossen
S
Sythus Themenstarter:in
166 Beiträge seit 2009
vor 12 Jahren
Encoding Problem iso-8859-1 bei E-Mail abruf mit imapX

Hallo zusammen,

Ich habe ein Encoding Problem beim abrufen von E-Mails mit imapX!
http://hellowebapps.com/products/imapx

Ich habe schon mehrere Sachen ausprobiert, unter anderem auch das:



       string encoding = m.HtmlBody.ContentType.Split('=')[1];
       string decodedBody = Encoding.GetEncoding(encoding).GetString(Convert.FromBase64String(m.HtmlBody.TextData));

Leider erhalte ich dabei folgenden Fehler:

Fehlermeldung:
Ungültige Zeichen in einer Base-64-Zeichenfolge.

Die HTML E-Mail Daten kommen als iso-8859-1 an. Die Umlaute werden alle nicht richtig angezeigt und ich kriege die Umwandlung in das richtige Format einfach nicht hin.

Zeichensätze machen mir leider schon immer Probleme und ich würde mich freuen wenn mir hier jemand den richtigen Tip geben könnte.

Vielen dank im vorraus

Sythus

S
Sythus Themenstarter:in
166 Beiträge seit 2009
vor 12 Jahren

Laut E-Mail Header handelt es sich bei dem Text um ein ISO-8859-1...

Ein weiterer Versuch sieht daher folgendermaßen aus:


                Byte[] byteArrIso = Encoding.GetEncoding("iso-8859-1").GetBytes(mail.Body);
                Byte[] byteArrUTF8 = Encoding.Convert(Encoding.GetEncoding("iso-8859-1"), Encoding.UTF8, byteArrIso);
                string encodedBody = Encoding.UTF8.GetString(byteArrUTF8);

Da mir der ContentType der E-mail ja sagt er sei ein ISO-8859-1, wandel ich
den Text in ein ByteArray und versuche anschließend das Bytearray von Iso zu UTF8 zu konvertieren.

Leider ohne erfolg, die umlaute werden nach wie vor nicht angezeigt.

Was mach ich Falsch? Wo ist mein Fehler?

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo Sythus,

das Encoding ist nur bei Eingabe- und Ausgabeoperationen relevant. C#-Strings sind immer als 16Bit-Unicode codiert. Wenn der Text als C# String vorliegt ist es schon zuspät. Du musst das richtige Encoding also schon beim Einlesen/Abrufen angeben. Wenn die Operation zum Abrufen der Mail keine Angabe des Encodings erlaubt, rufe die E-Mail als byte-Array ab und verwende dann Encoding.GetString mit dem richtigen Encoding, um daraus einen C# String zu machen.

Davon abgesehen gibt es bei E-Mail auch Transportcodierungen (z.B. Base64), aber das ist ein anders Thema. Wenn der Text in der E-Mail (bis auf die Umlaute) lesbar vorliegt, sollte die Verwendung des richtigen Encodings beim Einlesen das Problem lösen.

herbivore

Thema geschlossen