【问题标题】:Encoding issue when reading .eml file from MailBee从 MailBee 读取 .eml 文件时出现编码问题
【发布时间】:2014-04-15 17:55:09
【问题描述】:

这与我们使用的邮寄工具有关:MailBee,它非常易于使用。

  1. 我们创建一个邮件(如果需要,定义邮件正文和附件)
  2. 我们创建一个联系人列表并将其添加到数据表中
  3. 我们调用 MailBee 的 AddJob 方法,该方法生成 ANSI 格式的 .eml 文件
  4. 写入文件完成后,我们读取文件并找到To:字符串使用:Match match = Regex.Match(recipient, @"""(.*?)"" <(.*?)>");

这个值似乎是 base64 编码的。这是我对解析进行单元测试的代码。

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        TestMethods.DecodeString("To: \"=?utf-8?B?QWJkdXJyYWhpbSDvv716Z2Vub2dsdQ==?=\" <email@somehost.com;;>");
        // 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 之前所做的事情。但我无法验证。

【问题讨论】:

    标签: c# encoding base64


    【解决方案1】:

    您正在尝试将 ANSI 字符串转换为 UTF-8。这就是您看到此错误的原因。

    而不是...

    Encoding.UTF8.GetString(bytes);
    

    尝试使用:

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

    或者

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

    Source

    【讨论】:

    • 我以前试过这个,但后来我得到了???而不是奇怪的符号:Abdurrahim ???zgenoglu。该文件确实是 ANSI 格式,但据我了解,base64 编码源自 UTF8。
    • 我必须纠正自己,两种解决方案都返回Abdurrahim �zgenoglu
    【解决方案2】:

    这个解码不起作用的原因是Mailbee编码的字符串从一开始就是错误的。

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

    无论如何,当我这样做并确保导入的包含名称的 CSV 首先是 UTF8 时,它已经解决了。

    【讨论】:

      猜你喜欢
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多