Quoted Printable中的连续控制字符无法正确解码

时间:2015-08-18 22:03:47

标签: c# utf-8

我有一个邮件处理引擎,可以读取电子邮件(通常是UTF-8加密)并处理它们。我找到了一个关于如何解释控制字符的简洁解决方案here。但是这个答案是在2011年给出的......从那时起,似乎发生了一些变化。因为引用的答案中的代码使用正则表达式来标识格式Import from 'yourcommaseparatedfile.csv' of del insert into "SCHEMA"."TABLE" 或其他十六进制数字的任何内容并分别解码每个字符。但是拿这个字符串:

  

Elke = E2 = 80 = 99s格言

我将其输入encode/decode test site并将其正确解码为

  

埃尔克的座右铭

但是这个小撇号似乎是由3个控制代码的组合生成的。我所拥有的代码将每个代码分开处理,并以三个独立的,不可读的字符形式出现。

我可以使用哪些代码将这些特殊字符转换为正确的人类可读格式?

1 个答案:

答案 0 :(得分:1)

这是我在SO上找到的一段代码,用于寻找引用的可打印:

private static string Decode(string input, string bodycharset)
{
    var i = 0;
    var output = new List<byte>();
    while (i < input.Length)
    {
        if (input[i] == '=' && input[i + 1] == '\r' && input[i + 2] == '\n')
        {
            //Skip
            i += 3;
        }
        else if (input[i] == '=')
        {
            string sHex = input;
            sHex = sHex.Substring(i + 1, 2);
            int hex = Convert.ToInt32(sHex, 16);
            byte b = Convert.ToByte(hex);
            output.Add(b);
            i += 3;
        }
        else
        {
            output.Add((byte)input[i]);
            i++;
        }
    }
    if (String.IsNullOrEmpty(bodycharset))
        return Encoding.UTF8.GetString(output.ToArray());
    else
        return Encoding.GetEncoding(bodycharset).GetString(output.ToArray());
}

来源:Decoding Quoted printable message

  

Decode("Elke=E2=80=99s motto", "utf-8") - &gt;埃尔克的座右铭