Я пытаюсь прочитать электронное письмо с POP3 и перейти на правильную кодировку, когда нахожу кодировку в заголовках.
Я использую TCP-клиент для подключения к серверу POP3.
Ниже мой код:
public string ReadToEnd(POP3Client pop3client, out System.Text.Encoding messageEncoding)
{
messageEncoding = TCPStream.CurrentEncoding;
if (EOF)
return ("");
System.Text.StringBuilder sb = new System.Text.StringBuilder(m_bytetotal * 2);
string st = "";
string tmp;
do
{
tmp = TCPStream.ReadLine();
if (tmp == ".")
EOF = true;
else
sb.Append(tmp + "\r\n");
//st += tmp + "\r\n";
m_byteread += tmp.Length + 2; // CRLF discarded by read
FireReceived();
if (tmp.ToLower().Contains("content-type:") && tmp.ToLower().Contains("charset="))
{
try
{
string charSetFound = tmp.Substring(tmp.IndexOf("charset=") + "charset=".Length).Replace("\"", "").Replace(";", "");
var realEnc = System.Text.Encoding.GetEncoding(charSetFound);
if (realEnc != TCPStream.CurrentEncoding)
{
TCPStream = new StreamReader(pop3client.m_tcpClient.GetStream(), realEnc);
}
}
catch { }
}
} while (!EOF);
messageEncoding = TCPStream.CurrentEncoding;
return (sb.ToString());
}
Если я удалю эту строку:
TCPStream = new StreamReader(pop3client.m_tcpClient.GetStream(), realEnc);
Все работает нормально, за исключением того, что когда электронное письмо содержит разные символы кодировки, я получаю вопросительные знаки, поскольку исходная кодировка - ASCII.
Любые предложения о том, как изменить кодировку при чтении данных из сетевого потока?
charset=iso-8859-7
- person net_L   schedule 20.03.2014