[C#,Java,PHP] - IMAP文件夹名称编码和解码方法
[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文件夹名称编码和解码方法相关推荐
- java批量提取文件夹名称_bat 批量提取指定目录下的文件名
bat 批量提取指定目录下的文件名 下面是批量获取指定目录下的文件名的核心代码 @echo off echo text input set input= set /p input=: echo %in ...
- java Mail imap协议获取到得邮件文件夹名称
java Mail imap协议获取到得邮件文件夹名称 Imap协议 QQ imap.qq.com 端口:143 获取得邮件 Folder[] list 中 1.其他文件夹 2.INBOX 3.Sen ...
- java 列出邮箱所有默认文件夹名称
使用Javamail收取邮件,要知道邮箱文件夹名称,然后使用列如: Folder folder = store.getFolder("垃圾箱"); 就可以,那怎样知道folder ...
- (转)Unity Assets目录下的特殊文件夹名称(作用和是否会被打包到build中)
原文:http://wiki.unity3d.com/index.php/Special_Folder_Names_in_your_Assets_Folder 1.隐藏文件夹 以.开头的文件夹会被Un ...
- URL 路径长度限制(错误:指定的文件或文件夹名称太长)
本节讨论 URL 的构成.SharePoint 2010 构建 URL 的方式.URL 的编码和加长以及作为其他 URL 中的参数传递的方式. SharePoint URL 的构成 SharePoin ...
- java怎样输出一个文件夹,java合并一个文件夹下所有txt文件,输出到另一个txt,...
java合并一个文件夹下所有txt文件,输出到另一个txt,最近写了个单元测试,递归调用方法,把同一个文件夹里所有的txt合并输出到一个txt文件.参考了两个博客,分别是已有的方法,还有个就是检测tx ...
- asset文件夹路径 unity_Unity Assets目录下的特殊文件夹名称
1.隐藏文件夹 以.开头的文件夹会被Unity忽略.在这种文件夹中的资源不会被导入,脚本不会被编译.也不会出现在Project视图中. 2.Standard Assets 在这个文件夹中的脚本最先被编 ...
- JAVA SpringBoot zip文件夹重命名
因为项目采用obs文件存储,导致同名文件会被覆盖,所以采用后台根据时间戳重命名的方式,别的文件类型都没有问题,到zip的时候,发现解压后的文件名还是重命名之前的文件名,所以要实现zip文件里面的文件夹 ...
- Excel与bat批量生成文件夹,修改文件夹名称
用Excel与bat批量生成文件夹,修改文件夹名称 一.批量生成文件夹 excel一列输入文件名序列:另一列用公式生成要写入bat文件的序列,之后复制该列写入.txt文件,保存为.bat文件,双击运行 ...
最新文章
- 【Python】编程笔记11
- iptables之iptables命令详解
- mysql5.5表的创建源码_mysql5.5 源码安装
- 线性表----循环链表和静态链表
- 44 SD配置-销售凭证设置-定义状态参数文件
- 实现OO的最后一公里
- 零基础带你学习MySQL—not null 非空(二十四)
- JAVA 并发编程实践 - 原子变量与非阻塞同步机制 笔记
- Android移动应用基础教程 【程序活动单元Activity】
- python 时间模块 -- time
- Window.localStorage
- 怎样让硬盘分区显示整数大小
- 如何用计算机算标准偏差,标准差计算器怎样安装使用?标准差计算器使用教程介绍...
- Mybatis起别名的方法
- 【Unity学习笔记】——基础篇:关于光照GI
- [激光原理与应用-25]:《激光原理与技术》-11- 激光产生技术-非线性技术之激光倍频、非线性晶体CLBO、BBO、LBO
- Kanzi制作的应用能在鸿蒙系统中运行吗?
- db2 日期英式写法_db2 日期时间格式
- 华为鸿蒙最大合作伙伴,全球第三大手机系统「鸿蒙」上线,这19款能抢先用…...
- 草地排水 改了又改(DCOJ6013)