QuotedPrintable编码c#代码

 
using  System.Text;

namespace  NoPaste
{
    
public class QuotedPrintable
    
{
        
public static string Encode(string input, Encoding encoding)
        
{
            
const int MAXLINELENGTH = 76;
            
int currentLineLength = 0;
            
byte[] bytes = encoding.GetBytes(input.ToCharArray());
            StringBuilder result 
= new StringBuilder();

            
for (int i = 0; i < bytes.Length; i++)
            
{
                
if (bytes[i] == 10 || bytes[i] == 13)
                
{
                    
if (bytes[i] == 13 && GetNextByte(i, bytes, 1== 10)
                    
{
                        CheckLineLength(MAXLINELENGTH, 
ref currentLineLength, 0, result);
                        result.Append(
" ");
                        currentLineLength 
= 0;
                        i
++;
                        
continue;
                    }


                    
if (bytes[i] == 10)
                    
{
                        CheckLineLength(MAXLINELENGTH, 
ref currentLineLength, 0, result);
                        result.Append(
" ");
                        currentLineLength 
= 0;
                    }


                    
if (bytes[i] == 13)
                    
{
                        CheckLineLength(MAXLINELENGTH, 
ref currentLineLength, 3, result);
                        result.Append(
"=" + ConvertToHex(bytes[i]));
                    }

                }

                
else
                
{
                    
if ((bytes[i] >= 33 && bytes[i] <= 60|| (bytes[i] >= 62 && bytes[i] <= 126))
                    
{
                        CheckLineLength(MAXLINELENGTH, 
ref currentLineLength, 1, result);
                        result.Append(System.Convert.ToChar(bytes[i]));
                    }

                    
else
                    
{
                        
if (bytes[i] == 9 || bytes[i] == 32)
                        
{
                            CheckLineLength(MAXLINELENGTH, 
ref currentLineLength, 0, result);
                            result.Append(System.Convert.ToChar(bytes[i]));
                            currentLineLength
++;
                        }

                        
else
                        
{
                            CheckLineLength(MAXLINELENGTH, 
ref currentLineLength, 3, result);
                            result.Append(
"=" + ConvertToHex(bytes[i]));
                        }

                    }

                }

            }


            
return result.ToString();
        }


        
private static void CheckLineLength(int maxLineLength, ref int currentLineLength, int newStringLength, StringBuilder sb)
        
{
            
if (currentLineLength + 1 == maxLineLength || currentLineLength + newStringLength + 1 >= maxLineLength)
            
{
                sb.Append(
"= ");
                currentLineLength 
= 0+newStringLength;
            }

            
else
            
{
                currentLineLength 
+= newStringLength;
            }

        }


        
private static int GetNextByte(int index, byte[] bytes, int shiftValue)
        
{
            
int newIndex = index + shiftValue;

            
if (newIndex < 0 || newIndex > bytes.Length - 1 || bytes.Length == 0)
                
return -1;
            
else
                
return bytes[newIndex];
        }


        
private static string ConvertToHex(byte number)
        
{
            
string result = System.Convert.ToString(number, 16).ToUpper();
            
return (result.Length == 2? result : "0" + result;
        }

    }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值