C# Quoted-Printable園鷹、盾鷹

  

鹸崙旗鷹 旗鷹泌和:

  # using System;

  # using System.Collections;

  # using System.Text;

  #

  # /// <summary>

  # /// Class for encoding and decoding a string to QuotedPrintable

  # /// RFC 1521 http://www.ietf.org/rfc/rfc1521.txt

  # /// RFC 2045 http://www.ietf.org/rfc/rfc2045.txt

  # /// Date: 2006-03-23

  # /// Author: Kevin Spaun

  # /// Company: SPAUN Informationstechnik GmbH - http://www.spaun-it.com/

  # /// Feedback: [email protected]

  # /// License: This piece of code comes with no guaranties. You can use it for whatever you want for free.

  # ///

  # /// Modified by Will Huang ( http://blog.miniasp.com/post/2008/02/14/Quoted-Printable-Encoding-and-Decoding.aspx )

  # /// Modified at 2008-02-13

  # ///

  # /// Modified by reterry (http://www.glzy8.com)

  # /// Modified at 2008-11-29

  # /// Modified for MySelf

  # ///

  # /// </summary>

  # public class QuotedPrintable

  # {

  # private const byte EQUALS = 61;

  # private const byte CR = 13;

  # private const byte LF = 10;

  # private const byte SPACE = 32;

  # private const byte TAB = 9;

  #

  # /// <summary>

  # /// Encodes a string to QuotedPrintable

  # /// </summary>

  # /// <param name="_ToEncode">String to encode</param>

  # /// <returns>QuotedPrintable encoded string</returns>

  # public static string Encode(string _ToEncode)

  # {

  # StringBuilder Encoded = new StringBuilder();

  # string hex = string.Empty;

  # //byte[] bytes = Encoding.Default.GetBytes(_ToEncode);

  # byte[] bytes = Encoding.UTF8.GetBytes(_ToEncode);

  # //int count = 0;

  #

  # for (int i = 0; i < bytes.Length; i++)

  # {

  # //these characters must be encoded

  # if ((bytes[i] < 33 || bytes[i] > 126 || bytes[i] == EQUALS) && bytes[i] != CR && bytes[i] != LF && bytes[i] != SPACE)

  # {

  # if (bytes[i].ToString("X").Length < 2)

  # {

  # hex = "0" + bytes[i].ToString("X");

  # Encoded.Append("=" + hex);

  # }

  # else

  # {

  # hex = bytes[i].ToString("X");

  # Encoded.Append("=" + hex);

  # }

  # }

  # else

  # {

  # //check if index out of range

  # if ((i + 1) < bytes.Length)

  # {

  # //if TAB is at the end of the line - encode it!

  # if ((bytes[i] == TAB && bytes[i + 1] == LF) || (bytes[i] == TAB && bytes[i + 1] == CR))

  # {

  # Encoded.Append("=0" + bytes[i].ToString("X"));

  # }

  # //if SPACE is at the end of the line - encode it!

  # else if ((bytes[i] == SPACE && bytes[i + 1] == LF) || (bytes[i] == SPACE && bytes[i + 1] == CR))

  # {

  # Encoded.Append("=" + bytes[i].ToString("X"));

  # }

  # else

  # {

  # Encoded.Append(System.Convert.ToChar(bytes[i]));

  # }

  # }

  # else

  # {

  # Encoded.Append(System.Convert.ToChar(bytes[i]));

  # }

  # }

  # //if (count == 75)

  # //{

  # // Encoded.Append("=\r\n"); //insert soft-linebreak

  # // count = 0;

  # //}

  # //count++;

  # }

  #

  # return Encoded.ToString();

  # }

  #

  # /// <summary>

  # /// Decodes a QuotedPrintable encoded string

  # /// </summary>

  # /// <param name="_ToDecode">The encoded string to decode</param>

  # /// <returns>Decoded string</returns>

  # public static string Decode(string _ToDecode)

  # {

  # //remove soft-linebreaks first

  # //_ToDecode = _ToDecode.Replace("=\r\n", "");

  #

  # char[] chars = _ToDecode.ToCharArray();

  #

  # byte[] bytes = new byte[chars.Length];

  #

  # int bytesCount = 0;

  #

  # for (int i = 0; i < chars.Length; i++)

  # {

  # // if encoded character found decode it

  # if (chars[i] == '=')

  # {

  # bytes[bytesCount++] = System.Convert.ToByte(int.Parse(chars[i + 1].ToString() + chars[i + 2].ToString(), System.Globalization.NumberStyles.HexNumber));

  #

  # i += 2;

  # }

  # else

  # {

  # bytes[bytesCount++] = System.Convert.ToByte(chars[i]);

  # }

  # }

  #

  # //return System.Text.Encoding.Default.GetString(bytes, 0, bytesCount);

  # return System.Text.Encoding.UTF8.GetString(bytes, 0, bytesCount);

  # }

  # }