内容显示页
 
类别:.Net + C# | 浏览(1746) | 2008-11-29 13:34:53

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: 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 yongfa365 (http://www.yongfa365.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);
    }
}

 


引用:
C# 实现Quoted-Printable编码、解码
http://www.yongfa365.com/item/Quoted-Printable-Encoding-Decoding-Encode-Decode.html
 
 
相关链接
 
网友评论:
姓名: 记住我
网址:
邮箱:
内容:
验证码:  验证码图片 看不清? 换张图试试
 
     
 
 
文章分类
 
 
.Net + C#(74)
 
 
ASP+VBS(161)
 
 
 
Linux(10)
 
 
 
web 2.0(26)
 
 
 
 
 
心程(68)
 
生活(97)
 
 
     

Power by :柳永法(yongfa365)'Blog  | 京ICP备07011491号  QQ:64049027  E-mail:64049027@qq.com Weibo

申请友情链接 要求:跟本站主题相类似正规网站,双方交换为首页位置

转载请注明来源,以便后人及时得到最新、修正、加强版!!!