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 可以很好地解码消息,并且重音字符可以正确显示。

提前致谢。

4

1 回答 1

0

好吧,我看错了方向。这里的关键词是“Quoted-Printable”。这就是我的问题的来源,这是我真正需要解码的。

为了做到这一点,我遵循了 Martin Murphy 在此线程中发布的示例:

C#:用于解码 Quoted-Printable 编码的类?

描述的方法是:

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));
于 2013-07-11T16:58:47.857 回答