我有一个邮件处理引擎,可以读取电子邮件(通常是UTF-8加密)并处理它们。我找到了一个关于如何解释控制字符的简洁解决方案here。但是这个答案是在2011年给出的......从那时起,似乎发生了一些变化。因为引用的答案中的代码使用正则表达式来标识格式Import from 'yourcommaseparatedfile.csv' of del insert into "SCHEMA"."TABLE"
或其他十六进制数字的任何内容并分别解码每个字符。但是拿这个字符串:
Elke = E2 = 80 = 99s格言
我将其输入encode/decode test site并将其正确解码为
埃尔克的座右铭
但是这个小撇号似乎是由3个控制代码的组合生成的。我所拥有的代码将每个代码分开处理,并以三个独立的,不可读的字符形式出现。
我可以使用哪些代码将这些特殊字符转换为正确的人类可读格式?
答案 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;埃尔克的座右铭