重音字符在邮件源文件中显示为十六进制值

时间:2013-07-11 07:45:22

标签: c# email encoding utf-8 iso-8859-1

我必须将邮件内容转换为XML格式,但我遇到了一些编码问题。实际上,我的所有重音字符和其他一些字符都以十六进制值显示在消息文件中。 例如:

é is displayed =E9,
ô is displayed =F4,
= is displayed =3D...

邮件配置为使用iso-8859-1编码发送,我可以在文件中看到这些参数:

Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Notepad ++将文件检测为“ANSI as UTF-8”。

我需要在C#中转换它(我在SSIS项目中的脚本任务中)才能读取,我无法做到这一点。

我尝试在我的StreamReader中使用UTF-8对其进行编码,但它什么也没做。尽管我对这个主题进行了阅读,但我仍然不太了解导致我的问题的步骤和解决问题的方法。

我指出Outlook很好地解码了消息,并且正确显示了重音字符。

提前致谢。

1 个答案:

答案 0 :(得分:0)

好的,我看错了方向。这里的关键字是“Quoted-Printable”。这就是我的问题所在,这就是我真正要解码的问题。

为了做到这一点,我按照Martin Murphy在这个帖子中发布的例子:

C#: Class for decoding Quoted-Printable encoding?

描述的方法是:

public static string DecodeQuotedPrintables(string input)
{
    var occurences = new Regex(@"=[0-9A-F]{2}", RegexOptions.Multiline);
    var matches = occurences.Matches(input);
    foreach (Match match in matches)
    {
        char hexChar= (char) Convert.ToInt32(match.Groups[0].Value.Substring(1), 16);
        input =input.Replace(match.Groups[0].Value, hexChar.ToString());
    }
    return input.Replace("=\r\n", "");
}

总而言之,我在UTF8中打开一个StreamReader并将每个读取行放在一个字符串中:

myString += line + "\r\n";

我在UTF8中打开我的StreamWriter并编写解码的myString变量:

myStreamWriter.WriteLine(DecodeQuotedPrintables(myString));