IMAP文件夹编码解码

// 编码
02
private string IMAPEncode(string folder)
03
{
04
   string rtn = "", base64;
05
   int index = 0;
06
   Regex regAsis = new Regex(@"\G(?:[\x20-\x25\x27-\x7e])+");
07
   Regex reg26 = new Regex(@"\G&");
08
   Regex regEncode = new Regex(@"\G(?:[^\x20-\x7e])+");
09
   Regex regEq = new Regex(@"=+$");
10
   Regex regSlash = new Regex(@"\/");
11
   while (index < folder.Length) {
12
      Match m;
13
      m = regAsis.Match(folder, index);
14
      if(m.Success)
15
      {
16
         index = index + m.Length;
17
         rtn = rtn + m.Value;
18
         continue;
19
      }
20
      m = reg26.Match(folder, index);
21
      if(m.Success)
22
      {
23
         index = index + m.Length;
24
         rtn = rtn + "&-";
25
         continue;
26
      }
27
      m = regEncode.Match(folder, index);
28
      if(m.Success)
29
      {
30
         index = index + m.Length;
31
         base64 = Convert.ToBase64String(Encoding.GetEncoding("UTF-16BE").GetBytes(m.Value));
32
         base64 = regEq.Replace(base64, "");
33
         base64 = regSlash.Replace(base64, ",");
34
         rtn = rtn + "&" + base64 + "-";
35
         continue;
36
      }
37
   }
38
   return rtn;
39
}
40
// 解码
41
private string IMAPDeconde(string folder)
42
{
43
   string rtn = "", base64;
44
   int index = 0;
45
   Regex regAsis = new Regex(@"\G([^&]+)");
46
   Regex reg26 = new Regex(@"\G\&-");
47
   Regex regDecode = new Regex(@"\G\&([A-Za-z0-9+,]+)-?");
48
   Regex regComma = new Regex(@",");
49
   while (index < folder.Length) {
50
      Match m;
51
      m = regAsis.Match(folder, index);
52
      if(m.Success)
53
      {
54
         index = index + m.Length;
55
         rtn = rtn + m.Value;
56
         continue;
57
      }
58
      m = reg26.Match(folder, index);
59
      if(m.Success)
60
      {
61
         index = index + m.Length;
62
         rtn = rtn + "&";
63
         continue;
64
      }
65
      m = regDecode.Match(folder, index);
66
      if(m.Success)
67
      {
68
         index = index + m.Length;
69
         base64 = m.Value.Substring(1, m.Value.Length - 2);
70
         base64 = regComma.Replace(base64, "/");
71
         int mod = base64.Length % 4;
72
         if(mod > 0 ) base64 = base64.PadRight(base64.Length + (4 - mod), '=');
73
         base64 = Encoding.GetEncoding("UTF-16BE").GetString(Convert.FromBase64String(base64));
74
         rtn = rtn + base64;
75
         continue;
76
      }
77
   }
78
   return rtn;
79
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值