最近用c#写了个接收邮件的客户端程序,
当邮件原文中存在未编码的汉字时,
接收到本地后,这些汉字就成了乱码****************************************************
下面是通过网页查看邮件原文时邮件头的部分内容Subject: (AD)填简历,测试你现在到底值多少钱?
MIME-Version: 1.0
Content-Type: text/html;
charset="gb2312"
Content-Transfer-Encoding: 8bit****************************************************
接收到本地后,“Subject”字段就成了下面的乱码,其它字段正常Subject: (AD)����������������ڵ���ֵ����Ǯ��****************************************************下面是接收邮件部分的c#代码 private string CRLF = "\r\n";
private TcpClient client;
private NetworkStream netStream;
private StreamReader netStreamReader; public string Receive(int mailNumber)
{
string strBack = WriteToStream("RETR " + mailNumber);
if (strBack.StartsWith("+"))
{
StringBuilder strMailContent = new StringBuilder();
do
{
strBack = netStreamReader.ReadLine();
if (strBack != ".")
{
strMailContent.Append(strBack + CRLF);
}
}
while (strBack != ".");
return strMailContent.ToString();
}
else
{
}
} private string WriteToStream(string command)
{
byte[] bytSend = Encoding.ASCII.GetBytes(command + CRLF);
netStream.Write(bytSend, 0, bytSend.Length);
string strBack = netStreamReader.ReadLine(); return strBack;
}
当邮件原文中存在未编码的汉字时,
接收到本地后,这些汉字就成了乱码****************************************************
下面是通过网页查看邮件原文时邮件头的部分内容Subject: (AD)填简历,测试你现在到底值多少钱?
MIME-Version: 1.0
Content-Type: text/html;
charset="gb2312"
Content-Transfer-Encoding: 8bit****************************************************
接收到本地后,“Subject”字段就成了下面的乱码,其它字段正常Subject: (AD)����������������ڵ���ֵ����Ǯ��****************************************************下面是接收邮件部分的c#代码 private string CRLF = "\r\n";
private TcpClient client;
private NetworkStream netStream;
private StreamReader netStreamReader; public string Receive(int mailNumber)
{
string strBack = WriteToStream("RETR " + mailNumber);
if (strBack.StartsWith("+"))
{
StringBuilder strMailContent = new StringBuilder();
do
{
strBack = netStreamReader.ReadLine();
if (strBack != ".")
{
strMailContent.Append(strBack + CRLF);
}
}
while (strBack != ".");
return strMailContent.ToString();
}
else
{
}
} private string WriteToStream(string command)
{
byte[] bytSend = Encoding.ASCII.GetBytes(command + CRLF);
netStream.Write(bytSend, 0, bytSend.Length);
string strBack = netStreamReader.ReadLine(); return strBack;
}
原来在初始化StreamReader实例的时候要指定为“Encoding.Default”编码类型,其它编码都不行StreamReader netStreamReader = new StreamReader(netStream, Encoding.Default);