这与我们使用的邮件工具有关:MailBee,非常易于使用。
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之前做了些什么。但我无法验证。
答案 0 :(得分:1)
您正在尝试将ANSI字符串转换为UTF-8。这就是您看到此错误的原因。
而不是......
Encoding.UTF8.GetString(bytes);
尝试使用:
Encoding.GetEncoding(1252).GetString(bytes);
或者
Encoding.GetEncoding("ISO-8859-1").GetString(bytes);
答案 1 :(得分:0)
这种解码不起作用的原因是Mailbee编码的字符串从一开始就是错误的。
我找到的是你可以指定mailbee的RequestEncoding和ResponseEncoding,我设置为Encoding.UTF8
。
无论如何,当我这样做时它已经解决,并确保导入的包含名称的CSV首先是UTF8。