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

本文关键字:字符 十六进制 源文件 显示 | 更新日期: 2023-09-27 18:22:05

我必须将邮件消息的内容转换为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可以很好地解码邮件,并且重音字符显示正确。

提前谢谢。

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

好吧,我看错了方向。这里的关键词是"报价可打印"。这就是我的问题来源,也是我真正需要解读的。

为了做到这一点,我遵循了马丁·墨菲在这个帖子中发布的例子:

C#:用于解码引用的可打印编码的类?

描述的方法是:

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));