所以給出該輸入字符串:文本解碼問題
=?ISO-8859-1?Q?TEST=2C_This_Is_A_Test_of_Some_Encoding=AE?=
而這個功能:
private string DecodeSubject(string input)
{
StringBuilder sb = new StringBuilder();
MatchCollection matches = Regex.Matches(inputText.Text, @"=\?(?<encoding>[\S]+)\?.\?(?<data>[\S]+[=]*)\?=");
foreach (Match m in matches)
{
string encoding = m.Groups["encoding"].Value;
string data = m.Groups["data"].Value;
Encoding enc = Encoding.GetEncoding(encoding.ToLower());
if (enc == Encoding.UTF8)
{
byte[] d = Convert.FromBase64String(data);
sb.Append(Encoding.ASCII.GetString(d));
}
else
{
byte[] bytes = Encoding.Default.GetBytes(data);
string decoded = enc.GetString(bytes);
sb.Append(decoded);
}
}
return sb.ToString();
}
結果是與從輸入字符串中提取的數據。我做錯了,這個文本沒有得到正確的解碼?
UPDATE
所以,我對於解碼報價打印的驗證碼
public string DecodeQuotedPrintable(string encoded)
{
byte[] buffer = new byte[1];
return Regex.Replace(encoded, "=(\r\n?|\n)|=([A-F0-9]{2})", delegate(Match m)
{
if (byte.TryParse(m.Groups[2].Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out buffer[0]))
{
return Encoding.ASCII.GetString(buffer);
}
else
{
return string.Empty;
}
});
}
而這只是離開下劃線。我是否手動將它們轉換爲空格(Replace(「_」,「」)),還是有其他需要處理的東西?
你能否澄清的問題(你的情況!)?你是什麼意思,「結果與從輸入字符串中提取的數據相同」?這聽起來對我來說就像它工作得很好。 – 2010-04-05 15:19:54
返回的數據仍然編碼。 – 2010-04-05 15:25:08
引用可打印解碼器是根本錯誤的。它將無法處理除7位ASCII之外的任何內容,這些內容幾乎無法用於任何用途。 – 2010-04-05 16:29:12