Feedback

C# - Quoted Printable Encoder

Veröffentlicht von am 2/14/2008
(1 Bewertungen)
Zeichenketten, die mit "quoted printable" enkodiert werden sollen, lassen einen .Net-Entwickler schon das ein oder andere graue Haar wachsen. Denn in der BCL gibt es keine Standard-Mechanismen dafür - zumindest konnte ich keine Finden, die in C# zur Verfügung stand. Deshalb habe ich eine Klasse geschrieben, die den Vorgang des Enkodierens eines Textes in "quoted printable" übernimmt.
public class QuotedPrintableConverter
    {
        private static string _Ascii7BitSigns;
        private const string _equalsSign = "=";
        private const string _defaultReplaceEqualSign = "=";
        
        /// <summary>
        /// Ctor.
        /// </summary>
        private QuotedPrintableConverter()
        {
            //do nothing
        }

        /// <summary>
        /// Encodes a not QP-Encoded string.
        /// </summary>
        /// <param name="value">The string which should be encoded.</param>
        /// <returns>The encoded string</returns>
        public static string Encode(string value)
        {
            return Encode(value, _defaultReplaceEqualSign);
        }

        /// <summary>
        /// Encodes a not QP-Encoded string.
        /// </summary>
        /// <param name="value">The string which should be encoded.</param>
        /// <param name="replaceEqualSign">The sign which should replace the "="-sign in front of 
        /// each QP-encoded sign.</param>
        /// <returns>The encoded string</returns>
        public static string Encode(string value, string replaceEqualSign)
        {
            //Alle nicht im Ascii-Zeichnsatz enthaltenen Zeichen werden ersetzt durch die hexadezimale 
            //Darstellung mit einem vorangestellten =
            //Bsp.: aus "ü" wird "=FC"
            //Bsp. mit Ersetzungszeichen "%"für das "=": aus "ü" wird "%FC"

            GetAllowedAsciiSigns();
            StringBuilder sb = new StringBuilder();
            foreach (char s in value)
            {
                if (_Ascii7BitSigns.LastIndexOf(s) > -1)
                    sb.Append(s);
                else
                {

                    string qp = string.Format("{0}{1}",
                        _equalsSign,
                        System.Convert.ToString(s, 16)).Replace(_equalsSign, replaceEqualSign);
                    sb.Append(qp);
                }
            }

            return sb.ToString();
        }

        /// <summary>
        /// Gets a string which contains the first 128-characters (ANSII 7 bit).
        /// </summary>
        private static void GetAllowedAsciiSigns()
        {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < 127; i++)
            {
                sb.Append(System.Convert.ToChar(i));
            }
            _Ascii7BitSigns = sb.ToString();
        }
    }

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!