在VB.NET中将UTF-8转换为ASCII

时间:2009-02-20 14:28:25

标签: vb.net character-encoding

我正在编写一个控制台应用程序,它可以从不同的电子邮箱中读取电子邮件并通过它们处理。从各种自动化系统接收电子邮件。电子邮件将被记录和/或发送。

问题在于,有些电子邮件采用UTF-8编码,并以引用可打印方式进行传输编码,这会混淆特殊字符(主要是ä,ö和å)。我还没有找到任何解决方案来以可读格式转换它们。

例如,quoted-printable中的“ä”是“= C3 = A4”。使用正常的转换方法,结果是“Ô(乱码)。

我从这里无耻地撕掉了这个示例转换表:http://forums.sun.com/thread.jspa?threadID=5315363

char   codepoint          UTF-8 encoding                 as Latin-1

ä      11100100 = E4      11000011 10100100 = C3 A4      ä = \u00C3\u00A4
å      11100101 = E5      11000011 10100101 = C3 A5      Ã¥ = \u00C3\u00A5
ö      11110110 = F6      11000011 10110110 = C3 B6      ö = \u00C3\u00B6

Ä      11000100 = C4      11000011 10000100 = C3 84      Ã? = \u00C3\u0084
Å      11000101 = C5      11000011 10000101 = C3 85      Ã? = \u00C3\u0085
Ö      11010110 = D6      11000011 10010110 = C3 96      Ã? = \u00C3\u0096

那么如何从UTF-8值获得真正的代码点?我宁愿不使用任何外部库。此外我已经尝试了一对,但他们失败了。

3 个答案:

答案 0 :(得分:6)

我不完全确定,但这可能会解决问题:

Encoding.ASCII.GetString(Encoding.UTF8.GetBytes(yourString))

我现在不在我的电脑上,所以我无法测试它,但我会稍后再试。

答案 1 :(得分:0)

您需要在执行引用可打印转换后从UTF-8转换为Latin1。

http://msdn.microsoft.com/en-us/library/66sschk1.aspx看起来很有希望。

答案 2 :(得分:0)

根据您描述的效果,我猜您是通过直接连接到POP3邮箱来获取电子邮件的?如果是这样,那么您将以原始形式收到电子邮件,其中大多数邮件很可能是MIME格式。

MIME(Wikipedia有一个很好的概述)是一个相当大而复杂的标准,并且实现一个MIME解析器,可以可靠地处理你想要覆盖的所有情况,这很可能会花费你几个星期。

因此,我会考虑使用第三方MIME库为您完成这项工作。