C# Quoted-Printable编码、解码

复制代码 代码如下:

# using System;

# using System.Collections;

# using System.Text;

#

# ///


# /// 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: kspaun@spaun-it.de

# /// 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.jb51.net)

# /// Modified at 2008-11-29

# /// Modified for MySelf

# ///

# ///


# 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;

#

# ///


# /// Encodes a string to QuotedPrintable

# ///


# /// String to encode

# /// QuotedPrintable encoded string

# 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("=rn"); //insert soft-linebreak

# // count = 0;

# //}

# //count++;

# }

#

# return Encoded.ToString();

# }

#

# ///


# /// Decodes a QuotedPrintable encoded string

# ///


# /// The encoded string to decode

# /// Decoded string

# public static string Decode(string _ToDecode)

# {

# //remove soft-linebreaks first

# //_ToDecode = _ToDecode.Replace("=rn", "");

#

# 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);

# }

# }

0.215992s