// 编码
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
}
IMAP文件夹编码解码
最新推荐文章于 2022-10-26 17:33:10 发布