From ab4975fd3116569cf4c0bbca21c03cdbf0fe1991 Mon Sep 17 00:00:00 2001 From: Andy Edinborough Date: Sun, 8 Apr 2012 11:22:23 -0500 Subject: [PATCH] Make sure the correct charset is used -- #54 --- HeaderObject.cs | 5 +++-- TextClient.cs | 2 +- Utilities.cs | 4 +++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/HeaderObject.cs b/HeaderObject.cs index 7d581ba..32b4c48 100644 --- a/HeaderObject.cs +++ b/HeaderObject.cs @@ -38,8 +38,9 @@ public string Charset { public string Body { get; set; } internal void SetBody(string value) { + var encoding = Utilities.ParseCharsetToEncoding(Charset); if (ContentTransferEncoding.Is("quoted-printable")) { - value = Utilities.DecodeQuotedPrintable(value, Utilities.ParseCharsetToEncoding(Charset)); + value = Utilities.DecodeQuotedPrintable(value, encoding); } else if (ContentTransferEncoding.Is("base64") //only decode the content if it is a text document @@ -47,7 +48,7 @@ internal void SetBody(string value) { && Utilities.IsValidBase64String(value)) { var data = Convert.FromBase64String(value); using (var mem = new System.IO.MemoryStream(data)) - using (var str = new System.IO.StreamReader(mem, true)) + using (var str = new System.IO.StreamReader(mem, encoding)) value = str.ReadToEnd(); ContentTransferEncoding = string.Empty; diff --git a/TextClient.cs b/TextClient.cs index e66ba9f..668e4a6 100644 --- a/TextClient.cs +++ b/TextClient.cs @@ -16,7 +16,7 @@ public abstract class TextClient : IDisposable { public System.Text.Encoding Encoding { get; set; } public TextClient() { - Encoding = Utilities.ParseCharsetToEncoding("ISO-8859-1"); + Encoding = Utilities.ParseCharsetToEncoding(Utilities.DEFAULT_CHARSET); } internal abstract void OnLogin(string username, string password); diff --git a/Utilities.cs b/Utilities.cs index ac092aa..2c310af 100644 --- a/Utilities.cs +++ b/Utilities.cs @@ -7,6 +7,8 @@ namespace AE.Net.Mail { internal static class Utilities { + public const string DEFAULT_CHARSET = "ISO-8859-1"; + internal static void TryDispose(ref T obj) where T : class, IDisposable { try { if (obj != null) @@ -207,7 +209,7 @@ internal static string DecodeWords(string encodedWords) { /// If is public static Encoding ParseCharsetToEncoding(string characterSet) { if (string.IsNullOrEmpty(characterSet)) - return null; + characterSet = DEFAULT_CHARSET; string charSetUpper = characterSet.ToUpperInvariant(); if (charSetUpper.Contains("WINDOWS") || charSetUpper.Contains("CP")) {