2014-03-24 40 views
0

这与我们使用的邮件工具有关:MailBee,它非常易于使用。从MailBee读取.eml文件时的编码问题

  1. 我们创建一个邮件(如果需要定义邮件正文和附件)
  2. 我们创建联系人列表和它添加到一个DataTable
  3. 我们称之为的MailBee的这产生.eml文件AddJob方法ANSI格式
  4. 书面文件完成后,我们读文件,并使用找到To:字符串:Match match = Regex.Match(recipient, @"""(.*?)"" <(.*?)>");

该值似乎是base64编码。这是我的代码来单元测试解析。

[TestClass] 
public class UnitTest1 
{ 
    [TestMethod] 
    public void TestMethod1() 
    { 
     TestMethods.DecodeString("To: \"=?utf-8?B?QWJkdXJyYWhpbSDvv716Z2Vub2dsdQ==?=\" <[email protected];;>"); 
     // This results in "Abdurrahim �zgenoglu" while it should be "Abdurrahim Özgenoglu" 
    } 
} 

public class TestMethods { 
    public static string DecodeString(string stringToDecode) 
    { 
     Match base64Match = Regex.Match(stringToDecode, @"=\?utf-8\?B\?(.*)\?="); 
     if (base64Match.Success) 
     { 
      string encodedName = base64Match.Groups[1].Value; 
      byte[] bytes = Convert.FromBase64String(encodedName); 
      return Encoding.UTF8.GetString(bytes); 
     } 

     return stringToDecode; 
    } 
} 

有什么建议可能会在这里出错?我怀疑MailBee在将文本转换为base64之前所做的一些事情。但我无法证实这一点。

回答

0

之所以这样解码是不工作是,字符串正在由Mailbee编码从一开始就是错误的。

我发现的是,您可以指定mailbee的RequestEncoding和ResponseEncoding,我将其设置为Encoding.UTF8

无论如何,它的解决方案,当我这样做,并确保包含名称的导入CSV首先在UTF8中。

1

您试图将ANSI字符串转换为UTF-8。这就是为什么你看到这个错误。

而不是...

Encoding.UTF8.GetString(bytes); 

尝试使用:

Encoding.GetEncoding(1252).GetString(bytes); 

或者

Encoding.GetEncoding("ISO-8859-1").GetString(bytes); 

Source

+0

我以前试过,但后来我得到了?而不是怪异的符号:'Abdurrahim ??? zgenoglu'。据我了解,该文件确实在ANSI中,但base64编码源自UTF8。 – Peter

+0

我必须纠正自己,两个解决方案都会返回'Abdurrahimï¿ – Peter