[C#] 来源:http://www.oschina.net/code/snippet_110991_2237

// 编码private string IMAPEncode(string folder){string rtn = "", base64;int index = 0;   Regex regAsis = new Regex(@"\G(?:[\x20-\x25\x27-\x7e])+");   Regex reg26 = new Regex(@"\G&");   Regex regEncode = new Regex(@"\G(?:[^\x20-\x7e])+");   Regex regEq = new Regex(@"=+$");   Regex regSlash = new Regex(@"\/");while (index < folder.Length) {      Match m;      m = regAsis.Match(folder, index);if(m.Success)      {         index = index + m.Length;         rtn = rtn + m.Value;continue;      }      m = reg26.Match(folder, index);if(m.Success)      {         index = index + m.Length;         rtn = rtn + "&-";continue;      }      m = regEncode.Match(folder, index);if(m.Success)      {         index = index + m.Length;         base64 = Convert.ToBase64String(Encoding.GetEncoding("UTF-16BE").GetBytes(m.Value));         base64 = regEq.Replace(base64, "");         base64 = regSlash.Replace(base64, ",");         rtn = rtn + "&" + base64 + "-";continue;      }   }return rtn;}

// 解码private string IMAPDeconde(string folder){string rtn = "", base64;int index = 0;   Regex regAsis = new Regex(@"\G([^&]+)");   Regex reg26 = new Regex(@"\G\&-");   Regex regDecode = new Regex(@"\G\&([A-Za-z0-9+,]+)-?");   Regex regComma = new Regex(@",");while (index < folder.Length) {      Match m;      m = regAsis.Match(folder, index);if(m.Success)      {         index = index + m.Length;         rtn = rtn + m.Value;continue;      }      m = reg26.Match(folder, index);if(m.Success)      {         index = index + m.Length;         rtn = rtn + "&";continue;      }      m = regDecode.Match(folder, index);if(m.Success)      {         index = index + m.Length;         base64 = m.Value.Substring(1, m.Value.Length - 2);         base64 = regComma.Replace(base64, "/");int mod = base64.Length % 4;if(mod > 0 ) base64 = base64.PadRight(base64.Length + (4 - mod), '=');         base64 = Encoding.GetEncoding("UTF-16BE").GetString(Convert.FromBase64String(base64));         rtn = rtn + base64;continue;      }   }return rtn;}

[Java] 来源:http://grandboy.iteye.com/blog/908887

// 编码public class ImapFolderEncoder {public static String encode(String folder) {    String rtn = "", base64;int index = 0;    Pattern regAsis = Pattern.compile("\\G(?:[\\x20-\\x25\\x27-\\x7e])+");    Pattern reg26 = Pattern.compile("\\G&");    Pattern regEncode = Pattern.compile("\\G(?:[^\\x20-\\x7e])+");    Pattern regEq = Pattern.compile("=+$");    Pattern regSlash = Pattern.compile("\\/");while (index < folder.length()) {        Matcher m;        m = regAsis.matcher(folder);if (m.find(index)) {        index = index + (m.end() - m.start());        rtn = rtn + m.group();continue;        }        m = reg26.matcher(folder);if (m.find(index)) {        index = index + (m.end() - m.start());        rtn = rtn + "&-";continue;        }        m = regEncode.matcher(folder);if (m.find(index)) {        index = index + (m.end() - m.start());        base64 = SimpleUtil.encodeBase64Content(m.group(), "UTF-16BE");        base64 = base64.replaceAll(regEq.pattern(), "");        base64 = base64.replaceAll(regSlash.pattern(), ",");        rtn = rtn + "&" + base64 + "-";continue;        }    }return rtn;    }

}

// 解码public class ImapFolderDecoder {public static String decode(String folder) {    String rtn = "", base64;int index = 0;    Pattern regAsis = Pattern.compile("\\G([^&]+)");    Pattern reg26 = Pattern.compile("\\G\\&-");    Pattern regDecode = Pattern.compile("\\G\\&([A-Za-z0-9+,]+)-?");    Pattern regComma = Pattern.compile(",");while (index < folder.length()) {        Matcher m;        m = regAsis.matcher(folder);if (m.find(index)) {        index = index + (m.end() - m.start());        rtn = rtn + m.group();continue;        }        m = reg26.matcher(folder);if (m.find(index)) {        index = index + (m.end() - m.start());        rtn = rtn + "&";continue;        }        m = regDecode.matcher(folder);if (m.find(index)) {        index = index + (m.end() - m.start());        base64 = m.group().substring(1, m.group().length() - 1);        base64 = base64.replaceAll(regComma.pattern(), "/");int mod = base64.length() % 4;int count = 4 - mod;while (count > 0) {            base64 += "=";            count--;        }        base64 = SimpleUtil.base64Decode(base64, "UTF-16BE");        rtn = rtn + base64;continue;        }    }return rtn;    }}

[PHP] 来源:从上面C#的代码翻译过来

// 编码function IMAPEncode($sStr){$sOut = '';$sBase64 = '';$nIndex = 0;$sRegAsis = '/^(?:[\x20-\x25\x27-\x7e])+/';$sReg26 = '/^&/';$sRegEncode = '/^(?:[^\x20-\x7e])+/';$sRegEq = '/=+$/';$sRegSlash = '/\//';

while ($nIndex < strlen($sStr))    {$aTmp = array();$nResult = preg_match($sRegAsis, $sStr, &$aTmp, null, $nIndex);if ($nResult)        {$nIndex += strlen($aTmp[0]);$sOut .= $aTmp[0];continue;        }$nResult = preg_match($sReg26, $sStr, &$aTmp, null, $nIndex);if ($nResult)        {$nIndex += strlen($aTmp[0]);$sOut .= '&-';continue;        }$nResult = preg_match($sRegEncode, $sStr, &$aTmp, null, $nIndex);if ($nResult)        {$nIndex += strlen($aTmp[0]);$sBase64 = base64_encode(iconv('UTF-8', 'UTF-16BE', $aTmp[0]));$sBase64 = preg_replace($sRegEq, '', $sBase64);$sBase64 = preg_replace($sRegSlash, ',', $sBase64);$sOut .= '&' . $sBase64 . '-';continue;        }    }return $sOut;}

// 解码function IMAPDeconde($sStr){$sOut = '';$sBase64 = '';$nIndex = 0;$sRegAsis = '/^([^&]+)/';$sReg26 = '/^\&-/';$sRegDecode = '/^\&([A-Za-z0-9+,]+)-?/';$sRegComma = '/,/';

while ($nIndex < strlen($sStr))    {$aTmp = array();$nResult = preg_match($sRegAsis, $sStr, &$aTmp, null, $nIndex);if ($nResult)        {$nIndex += strlen($aTmp[0]);$sOut .= $aTmp[0];continue;        }$nResult = preg_match($sReg26, $sStr, &$aTmp, null, $nIndex);if ($nResult)        {$nIndex += strlen($aTmp[0]);$sOut .= '&';continue;        }$nResult = preg_match($sRegDecode, $sStr, &$aTmp, null, $nIndex);if ($nResult)        {$nIndex += strlen($aTmp[0]);$sBase64 = substr($aTmp[0], 1, strlen($aTmp[0]) - 2);$sBase64 = preg_replace($sRegComma, '/', $sBase64);$nMod = strlen($sBase64) % 4;if ($nMod > 0) $sBase64 .= str_repeat('=', 4 - $nMod);$sBase64 = iconv('UTF-16BE', 'UTF-8', base64_decode($sBase64));$sOut .= $sBase64;continue;        }    }return $sOut;}

转载于:https://www.cnblogs.com/hcbin/archive/2012/03/01/2375067.html

[C#,Java,PHP] - IMAP文件夹名称编码和解码方法相关推荐

  1. java批量提取文件夹名称_bat 批量提取指定目录下的文件名

    bat 批量提取指定目录下的文件名 下面是批量获取指定目录下的文件名的核心代码 @echo off echo text input set input= set /p input=: echo %in ...

  2. java Mail imap协议获取到得邮件文件夹名称

    java Mail imap协议获取到得邮件文件夹名称 Imap协议 QQ imap.qq.com 端口:143 获取得邮件 Folder[] list 中 1.其他文件夹 2.INBOX 3.Sen ...

  3. java 列出邮箱所有默认文件夹名称

    使用Javamail收取邮件,要知道邮箱文件夹名称,然后使用列如: Folder folder = store.getFolder("垃圾箱"); 就可以,那怎样知道folder ...

  4. (转)Unity Assets目录下的特殊文件夹名称(作用和是否会被打包到build中)

    原文:http://wiki.unity3d.com/index.php/Special_Folder_Names_in_your_Assets_Folder 1.隐藏文件夹 以.开头的文件夹会被Un ...

  5. URL 路径长度限制(错误:指定的文件或文件夹名称太长)

    本节讨论 URL 的构成.SharePoint 2010 构建 URL 的方式.URL 的编码和加长以及作为其他 URL 中的参数传递的方式. SharePoint URL 的构成 SharePoin ...

  6. java怎样输出一个文件夹,java合并一个文件夹下所有txt文件,输出到另一个txt,...

    java合并一个文件夹下所有txt文件,输出到另一个txt,最近写了个单元测试,递归调用方法,把同一个文件夹里所有的txt合并输出到一个txt文件.参考了两个博客,分别是已有的方法,还有个就是检测tx ...

  7. asset文件夹路径 unity_Unity Assets目录下的特殊文件夹名称

    1.隐藏文件夹 以.开头的文件夹会被Unity忽略.在这种文件夹中的资源不会被导入,脚本不会被编译.也不会出现在Project视图中. 2.Standard Assets 在这个文件夹中的脚本最先被编 ...

  8. JAVA SpringBoot zip文件夹重命名

    因为项目采用obs文件存储,导致同名文件会被覆盖,所以采用后台根据时间戳重命名的方式,别的文件类型都没有问题,到zip的时候,发现解压后的文件名还是重命名之前的文件名,所以要实现zip文件里面的文件夹 ...

  9. Excel与bat批量生成文件夹,修改文件夹名称

    用Excel与bat批量生成文件夹,修改文件夹名称 一.批量生成文件夹 excel一列输入文件名序列:另一列用公式生成要写入bat文件的序列,之后复制该列写入.txt文件,保存为.bat文件,双击运行 ...

最新文章

  1. 【Python】编程笔记11
  2. iptables之iptables命令详解
  3. mysql5.5表的创建源码_mysql5.5 源码安装
  4. 线性表----循环链表和静态链表
  5. 44 SD配置-销售凭证设置-定义状态参数文件
  6. 实现OO的最后一公里
  7. 零基础带你学习MySQL—not null 非空(二十四)
  8. JAVA 并发编程实践 - 原子变量与非阻塞同步机制 笔记
  9. Android移动应用基础教程 【程序活动单元Activity】
  10. python 时间模块 -- time
  11. Window.localStorage
  12. 怎样让硬盘分区显示整数大小
  13. 如何用计算机算标准偏差,标准差计算器怎样安装使用?标准差计算器使用教程介绍...
  14. Mybatis起别名的方法
  15. 【Unity学习笔记】——基础篇:关于光照GI
  16. [激光原理与应用-25]:《激光原理与技术》-11- 激光产生技术-非线性技术之激光倍频、非线性晶体CLBO、BBO、LBO
  17. Kanzi制作的应用能在鸿蒙系统中运行吗?
  18. db2 日期英式写法_db2 日期时间格式
  19. 华为鸿蒙最大合作伙伴,全球第三大手机系统「鸿蒙」上线,这19款能抢先用…...
  20. 草地排水 改了又改(DCOJ6013)

热门文章

  1. php 空间类元素引入_引入单元素模式
  2. (C++)1026 程序运行时间
  3. Python wordcloud库使用说明
  4. 参加软件测试培训需要学习哪些知识
  5. 软件测试培训分享:做软件测试工作如何清楚的描述一个bug
  6. PMP®考试是什么机构
  7. 通过yum安装配置lamp
  8. 去除ios input部分默认样式
  9. angular指令ng-class巧用
  10. Linux Shell 脚本限制ssh最大用户登录数