Donc, étant donné cette chaîne d'entrée:Texte Décodage Problème
=?ISO-8859-1?Q?TEST=2C_This_Is_A_Test_of_Some_Encoding=AE?=
Et cette fonction:
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();
}
Le résultat est le même que les données extraites de la chaîne d'entrée. Qu'est-ce que je fais de mal que ce texte ne soit pas décodé correctement?
MISE À JOUR
j'ai donc ce code pour décoder citation imprimable:
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;
}
});
}
Et qui laisse juste les underscores. Est-ce que je les convertis manuellement en espaces (Replace ("_", "")), ou y a-t-il autre chose que je dois faire pour gérer cela?
Pouvez-vous préciser le problème (votre cas!)? Que voulez-vous dire, "Le résultat est le même que les données extraites de la chaîne d'entrée"? Cela me semble que ça fonctionne très bien. –
Les données sont renvoyées toujours codées. –
Ce décodeur imprimable cité est fondamentalement faux. Il ne sera pas capable de gérer quoi que ce soit sauf l'ASCII 7 bits qui ne le coupera pas pour pratiquement n'importe quel usage. –