我正在使用OpenPop库读取电子邮件。我有一个问题:当阅读电子邮件的正文时,库会修改一个字符。请参见以下示例:
电子邮件正文:
DiseıO
代码c#:
OpenPop.Pop3.Pop3Client objPOP3 = new OpenPop.Pop3.Pop3Client();
OpenPop.Mime.Message message = default(OpenPop.Mime.Message);
OpenPop.Mime.MessagePart plainTextPart = default(OpenPop.Mime.MessagePart);
string bodyMailTxt = "";
objPOP3.Connect(Host, Port, UseSSL);
objPOP3.Authenticate(User, Password);
message = objPOP3.GetMessage(1);
plainTextPart = message.FindFirstPlainTextVersion();
bodyMailTxt = plainTextPart.GetBodyAsText();代码vb:
Dim objPOP3 As New OpenPop.Pop3.Pop3Client
Dim message As OpenPop.Mime.Message
Dim plainTextPart As OpenPop.Mime.MessagePart
Dim bodyMailTxt As String = ""
ObjPOP3.Connect(Host, Port, UseSSL)
ObjPOP3.Authenticate(User, Password)
message = objPOP3.GetMessage(1)
plainTextPart = message.FindFirstPlainTextVersion()
bodyMailTxt = plainTextPart.GetBodyAsText()bodyMailTxt值为“Dise f±o”,它取代了ƒ (拉丁文小写字母F whit钩子),代替了f (拉丁文小写字母F)。
我得做些什么才能不发生这种事?
发布于 2012-11-14 22:56:15
从OpenPop.Mime.MessagePart类的源代码来看,它看起来像是plainTextPart.GetBodyAsText(),得到了这样的文本,return BodyEncoding.GetString(Body),其中BodyEncoding是Encoding类型的公共属性,Body是包含消息的原始字节数组的公共属性。
我不知道,也不能真正测试,但可能是消息用来解码文本的默认编码与发送文本时使用的编码不一样。在调用plainTextPart.Encoding = Encoding.ASCII方法之前,您可能能够看到通过尝试.GetBodyAsText()或plainTextPart.Encoding = Encoding.UTF8或plainTextPart.Encoding = Encoding.Unicode得到的结果。
链接到MessagePart源文件:
http://hpop.svn.sourceforge.net/viewvc/hpop/trunk/OpenPop/Mime/MessagePart.cs?revision=377&view=markup
https://stackoverflow.com/questions/13385831
复制相似问题