Z POP3 poprzez StreamReader na czytelne znaki. Jak?

0

Witam,
Dla własnej satysfakcji zacząłem pisać klienta POP3 i mam nie mały problem z pobieraniem polskich znaków. Emaile na serwerze są w standardzie MIME, który koduje w "7-bit ASCII character set", oraz zawierają informację jakie było pierwotne kodowanie np. "ISO-8859-2". Znalazłem informację w internecie, że gdy pobiorę za pomocą StreamReader'a wiadomość do stringu jest już za późno żeby ją "przetegować" znowu na te pierwotne kodowanie - owe przykładowe "ISO-8859-2". Niestety jest to chyba prawda bo zdanie które wcześniej wysłałem: "Pójść tam, czy nie?", pobieram już jako "P=F3j=B6=E6 tam, czy nie?" i nijak nie znalazłem w internecie sposobu na dekodowanie tego do polskich znaków. Moje pytanie brzmi więc w jaki inny sposób sobie z tym poradzić? Przecież programy pocztowe jakoś odczytują te znaki i ładnie wyświetlają. Nie chcę być gorszy. Proszę o propozycję.
Pozdrawiam.

0
pastefqa napisał(a)

ale o co kaman tak naprawdę? ó = "=F3", ś = "=B6", ć = "=E6" - pastefqa dzisiaj, 09:57

no tak, zgodnie z tą tabelką: http://pl.wikipedia.org/wiki/Kodowanie_polskich_znak%C3%B3w

Jeżeli wyślesz maila na skrzynkę(np. o2), i potem go sobie pobierzesz zgodnie z tą instrukcją: http://www.geekpedia.com/tutorial172_Connecting-to-a-POP3-server-using-Csharp.html , to otrzymasz długiego stringa zawierającego nagłówek wiadomości, jej treść i ewentualny załącznik. Zonk w tym, że tak pobrana wiadomość zawiera tylko informacje w jaki sposób kodowane były znaki w momencie pisania wiadomości, a wszystkie niestandardowe znaki, typu właśnie ó, ś, ć są zapisane zgodnie z tabelką w linku: http://pl.wikipedia.org/wiki/Kodowanie_polskich_znak%C3%B3w . A ja chcę czytać wiadomość z polskimi znakami, a nie dziwnymi symbolami. Dzięki za zainteresowanie :).

Tak wygląda tym sposobem pobrana wiadomość(tu używałem cmd>telnet, ale w programie chodzi o to samo)

 +OK POP3 poczta.o2.pl Ready
user mylog
+OK
pass mypass
+OK
list
+OK
1 1839
2 764834
3 1180
4 933
5 27912
6 1866
7 64244
.
top 4 0
+OK
Return-Path: <jozefkarton@o2.pl>
Received: by o2.pl (o2.pl mailsystem) with LMTP;
        Tue, 30 Nov 2010 22:47:38 +0100
Received: by moh2-ve3.go2.pl (Postfix)
        id 568DD370184; Tue, 30 Nov 2010 22:47:38 +0100 (CET)
Delivered-To: jozefkarton@o2.pl
Received: from moh2-ve3.go2.pl (unknown [10.0.0.208])
        by moh2-ve3.go2.pl (Postfix) with ESMTP id ADE04370144
        for <jozefkarton@o2.pl>; Tue, 30 Nov 2010 22:47:35 +0100 (CET)
Received: from o2.pl (unknown [10.0.0.17])
        by moh2-ve3.go2.pl (Postfix) with SMTP
        for <jozefkarton@o2.pl>; Tue, 30 Nov 2010 22:47:35 +0100 (CET)
Subject: =?UTF-8?Q?TEMAT!_=C4=85=C4=99=C5=9B=C5=BA?=
From: =?UTF-8?Q?jozefkarton?= <jozefkarton@o2.pl>
To: jozefkarton@o2.pl
Mime-Version: 1.0
Message-ID: <53e48da6.dd41a8c.4cf570f6.9f510@o2.pl>
Date: Tue, 30 Nov 2010 22:47:34 +0100
X-Originator: 91.214.54.37
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Antivirus: avast! (VPS 101202-0, 2010-12-02), Inbound message
X-Antivirus-Status: Clean

Zauważ że w "Subject: " są dziwne znaczki (=C4=85=C4=99=C5=9B=C5=BA?=), tam właśnie wpisałem celowo kilka polskich znaków. Jeszcze raz pytanie. Jak je dekodować na ładne polskie literki?

0

Wydaje mi się, że skoro masz treść maila w stringu, to wystarczy zamienić te magiczne znaczki na odpowiadające im polskie litery.

0

No tak, to jest właśnie mój cel. Pytanie czy .net zrobi to za mnie, czy też muszę się bawić ręcznie? Jak powycinać fragmenty tego stringu - skąd mam wiedzieć że dany fragment nie był celowo napisany dziwnymi znaczkami? Teoretycznie jest możliwość że autor wiadomości faktycznie chciał napisać temat: "=E6" i wcale nie jest to zamieniona literka 'ć'.

Z tego co widzę to chyba rozwiązanie nie jest takie proste. Właściwie pytałem po to żeby uniknąć ręcznej zamiany dziwnych symboli. Skoro się nie da zrobić czegoś tego typu to chyba mój program zmieni się w program anglojęzyczny, i tyle :).

0

jozefkarton - piszę odnośnie Twojego maila - ja osobiście w .NET nie znalazłem czegoś co ładnie samo przekonwertuje mi zakodowane znaki na polskie ogonki z niektórych kodowań, np. z takiego jakie masz w pokazanym maili czyli quoted-printable nie znalazłem.. I tak jak przedmówca pisze - masz tablice dla danego ISO i rozkodowujesz ;-)

patrzysz na człon (co zresztą wiesz):

Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable 

dekodujesz z tablicami.. chyba że nie słyszałem o jakimś mechanizmie.. No chyba że masz maila ISO-8859-2 8bit no to tu już polskie znaki są od razu i jest git..

0

No dobra. Przetestowałeś polskie wygibasy...
A teraz przetestuj polskie wygibasy PLUS z klawiatury np. =E6.
Jeśli wyjdzie to samo dla polskiego krzaka i dla...
No to masz problem - Twoje rozwiązanie będzie tylko dla anglojęzycznych... ;)

I jeśli chodzi o mnie to dobrze! Wg mnie od jakiegoś 1980. wszyscy na tej popieprzonej planecie powinni znać "english"!
Nawet nie można się "prostego" C# nauczyć bez podstawowej znajomości angielskiego...

1 użytkowników online, w tym zalogowanych: 0, gości: 1