急!高分求救!邮件的编码问题??

jdxx 2003-06-25 08:31:08
我写了一个接受邮件的SMTP的控件,什么都搞定了,就是出来一堆乱码,如果标题是英文的,没有问题,如果是中文,就是乱码,怎么解决?附一些源码:

我觉得可能是
Encoding tmpEncoding = Encoding.Default;
的问题,但其他我都试过了,如:ASCII,Unicode,UTF7,UTF8,GetEncoding("GB18030"),都不行,谁能帮帮我!!!!!!!!

//源码如下:
private void MsgReceive(int BufSize)
{
int nTotalRead = 0;
try
{
int bytesread = 0;
m_strTempResponse = null;
StringBuilder sbTemp = new StringBuilder((int)(BufSize * 1.5));
byte[] recvBuf = new byte[m_nMaxBuffer + 1]; // extra char for

do
{
bytesread = m_sSocket.Receive(recvBuf, m_nMaxBuffer, 0);
if(bytesread == 0)
break;
nTotalRead += bytesread;
recvBuf[bytesread] = System.Convert.ToByte('\0');

Encoding tmpEncoding = Encoding.Default;

sbTemp.Append(tmpEncoding.GetChars(recvBuf, 0, bytesread));

}while(m_sSocket.Poll(100, SelectMode.SelectRead));

m_strTempResponse = sbTemp.ToString();

int nResp = m_strTempResponse.Substring(0, 5).IndexOf(POS_STAT_IND);

if(nResp <= 0)
{
string strExcept = "Received negative response from POP3 server";
throw new POP3CommException(strExcept);
}
}
catch(POP3CommException e)
{
m_strError = e.Message;
TRACE(e.ToString());
string strErr = DateTime.Now.Date.ToString();
strErr += DateTime.Now.TimeOfDay.ToString();
strErr += "\t";
strErr += e.Message;
LogError(strErr);
throw new POP3CommException(e.Message);
}

catch(SocketException e)
{
m_strError = e.Message;
TRACE(e.ToString());
string strErr = DateTime.Now.Date.ToString();
strErr += DateTime.Now.TimeOfDay.ToString();
strErr += "\t";
strErr += e.Message;
strErr += "\nSocket Error: ";
strErr += e.ErrorCode.ToString();
LogError(strErr);
throw new SocketException(e.ErrorCode);
}

catch(Exception e)
{
m_strError = e.Message;
TRACE(e.ToString());
string strErr = DateTime.Now.Date.ToString();
strErr += DateTime.Now.TimeOfDay.ToString();
strErr += "\t";
strErr += e.Message;
LogError(strErr);
}

}
...全文
56 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdxx 2003-06-27
  • 打赏
  • 举报
回复
多谢大家,正在解决中。
jdxx 2003-06-26
  • 打赏
  • 举报
回复
to: fuancld2(Dianel)
多谢!!!收到了,正在看源码。

to: csdn_bob(文子)
Encoding tmpEncoding = System.Text.Encoding.GetEncoding("gb2312");

Encoding tmpEncoding = System.Text.Encoding.GetEncoding("GB18030");
都不行。
fuancld2 2003-06-26
  • 打赏
  • 举报
回复
已经发给你了
csdn_bob 2003-06-26
  • 打赏
  • 举报
回复
try:
Encoding tmpEncoding = System.Text.Encoding.GetEncoding("gb2312");

我也遇到过,我是上面这样写的,但是现在帖子找不到了!
jdxx 2003-06-26
  • 打赏
  • 举报
回复
好像不是MIME编码,是这样的字符:=?gb2312?B?UmU6INfutuC92sqhMjIw1KqhqqGqtbG1sb6tteTTsMrTvuc11dujoQ==?

to: fuancld2(Dianel)
我的mail:jdxx@263.net,多谢!!!
fuancld2 2003-06-26
  • 打赏
  • 举报
回复
http://www.codeproject.com/ 查找smtp,有很多相关资料,
或留下email,我发送给你
superct 2003-06-26
  • 打赏
  • 举报
回复
和Encoding无关,是不是出现D4=DA?=B8=E6=BD=E7=B5=C4=BB=EC=D1=AA=C3=C0=C5=AE?=这样的东西,这是MIME编码。
superct 2003-06-26
  • 打赏
  • 举报
回复
中文是MIME编码,你可以看看rfc2045
Earthdog 2003-06-26
  • 打赏
  • 举报
回复
=?gb2312?B?UmU6INfutuC92sqhMjIw1KqhqqGqtbG1sb6tteTTsMrTvuc11dujoQ==?=
表示采用GB2312字符集(=?gb2312?),使用Base64编码(B?)

还有可能采用Quoted-printable编码的,格式类似如下
=?gb2312?Q?=B8=E6=BD=E7=B5=C4=BB=EC=D1=AA=C3=C0=C5=AE?=
~~~这里是Q表示采用Quoted-Printable编码,B表示上面所说的Base64编码,具体的编码方式自己到网上去搜索吧
jdxx 2003-06-25
  • 打赏
  • 举报
回复
ASCII,Unicode,UTF7,UTF8,GetEncoding("GB18030"),都不行。
"最好安装一个中文包,以支持对开发的控件."是指什么?我装的是中文版的vs.net 和.net framework

有什么办法吗?
tangdaqu 2003-06-25
  • 打赏
  • 举报
回复
最好安装一个中文包,以支持对开发的控件.
suasun 2003-06-25
  • 打赏
  • 举报
回复
Encoding.ASCII 试过没有?
li_aiwu 2003-06-25
  • 打赏
  • 举报
回复
学习!

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧