我实际上对同一个问题有两个问题,但我认为最好将它们分开,因为我认为它们并不相关。
背景: 我正在VB.NET中编写一个Windows Mobile软件,其中任务需要连接到邮件服务器以发送和检索电子邮件。因此,我还需要一个Mime解析器(用于解码和编码)电子邮件以获取附件。首先我想,我会写一个小的“hack”来处理这个问题(使用普通的字符串解析),但后来我看到了一个用C#编写的项目,at CodeProject我认为我会在我的解决方案中实现。我对C#了解不多,所以我只是从类中创建了一个类库,并在我的VB.NET项目中使用它。当我在普通的Windows计算机上瞄准Net Framework时,这个库运行得非常好,但当我打算制作针对Compact Net Framework的同一个库时,我遇到了麻烦。这是很自然的,因为Compact Net Framework有更多的限制,但实际上我并没有得到那么多错误 - 只有两个错误,尽管在代码的不同位置重复出现。
其中一个错误是在这个问题的主题中引用的错误,即“方法'没有重载'GetString'采用'1'参数”。如上所述,我对C#了解不多,所以我将带有错误的类转换为VB-NET,但我仍然不太了解。这是给出上述错误的函数:
public virtual string DecodeToString(string s)
{
byte[] b = DecodeToBytes(s);
if(m_charset != null)
{
//ERROR ON THIS LINE
return System.Text.Encoding.GetEncoding(m_charset).GetString(b);
}
else
{
m_charset = System.Text.Encoding.Default.BodyName;
//ERROR ON THIS LINE
return System.Text.Encoding.Default.GetString(b);
}
}
如果此类需要完整的源代码,那么我可以将其发布在此主题中的另一条消息中,或者您可以通过在上述网站上下载代码并查看该类来找到它名为MimeCode.cs。
任何可以帮助我的人?我可以以某种方式重写上述功能来克服这个问题吗?
我事先感谢你的帮助。
亲切的问候,祝大家新年快乐。
RGDS, moster67
答案 0 :(得分:9)
CF .NET要求您使用签名:Encoding.GetString方法(array [],Int32索引,Int32计数)所以请尝试使用:
...GetString(b, 0, b.Length);
答案 1 :(得分:2)
如果在MSDN上查找Encoding类,您将在紧凑框架中找到有关方法可用性的信息。
http://msdn.microsoft.com/en-us/library/system.text.encoding.default.aspx
在您的情况下,.NET Compact Framework 3.5,2.0,1.0支持System.Text.Encoding.Default属性,因此您应该全部设置。
但事情就是这样。 MS有时从类实现中删除方法,或者精确重载。
查看文档 http://msdn.microsoft.com/en-us/library/system.text.encoding.getstring.aspx你可以通过查看图标(左边的小图片)看出,当.NET Compact Framework支持编码类时,一些重载被删除了。
当你将byte []数组传递给GetString方法时,它找不到那个重载,所以你必须添加一个int offset和int count。
答案 2 :(得分:1)
紧凑框架可能不支持仅占用字节数组的重载。尝试使用字节数组,起始索引和计数的重载,并将其作为起始索引为0,将b.Length作为长度。
答案 3 :(得分:0)
感谢Michael,John和Rune回答我的问题。通过使用您的建议,我解决了问题,并设法编译/构建面向CF.NET 3.5的库。还要感谢ctacke编辑我的问题并使其更具可读性。
顺便说一下,正如我在第一篇文章中提到的,我还有另一个问题,我打算在另一个帖子中提出这个问题并且不允许我为CF.NET构建库,即行:m_charset = System.Text.Encoding.Default.BodyName;
在这种情况下,问题是CF.NET无法识别“BodyName”。我找不到任何替代方法或变通方法来获取所使用的字符集(BodyName检索此信息),所以最后我只是为它分配了一个固定值(iso-8859-1)。这意味着不幸的是,库不会处理所有不同的字符集,但至少代码不会中断,我能够编译它。在任何情况下,对我而言,这已经足够,因为我的应用程序不关心文本消息 - 它使用电子邮件发送和获取附件(类似于Gmail驱动器,但我自己的提供商)。
再次感谢你。
亲切的问候, moster67