当前位置: 首页 > 编程日记 > 正文

[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

相关文章:

fzu 2150 Fire Game 【身手BFS】

称号&#xff1a;fzu 2150 Fire Game &#xff1a;给出一个m*n的图&#xff0c;‘#’表示草坪&#xff0c;‘ . ’表示空地&#xff0c;然后能够选择在随意的两个草坪格子点火。火每 1 s会向周围四个格子扩散&#xff0c;问选择那两个点使得燃烧全部的草坪花费时间最小&#xf…

K-Means聚类算法原理

来自&#xff1a;https://www.cnblogs.com/pinard/p/6164214.html K-Means算法是无监督聚类算法&#xff0c;它有很多变体。包括初始化优化K-Means&#xff0c;距离计算优化elkan K-Means算法和大样本优化Mini Batch K-Means算法。 1. K-Means原理 K-Means算法思想&#xff1a;…

safari java插件故障_safari flash插件故障怎么办 mac safari flash插件故障解决方法

近几日&#xff0c;许多网友都在关注safari flash插件故障怎么办 mac safari flash插件故障解决方法这个话题&#xff0c;那么safari flash插件故障怎么办 mac safari flash插件故障解决方法具体情况是怎么样的呢&#xff1f;safari flash插件故障怎么办 mac safari flash插件故…

Traveller项目介绍

Traveller&#xff0c;翻译为旅行家&#xff0c;是我用来实践最佳web技术的项目&#xff0c;主题是一个给旅行爱好者提供旅行信息的网站。 目标是组合现最流行的web技术&#xff0c;实现符合中国用户使用习惯的网站。 相关网址 Git&#xff1a;https://github.com/mingziday/Tr…

窗口之间传递消息的一个方法

发送窗口的代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Wi…

docker制作镜像篇(基于容器)

docker制作镜像可以有两种方式&#xff1a;一、基于容器&#xff08;使用busybox制作http镜像&#xff09;1.首先运行一个容器2.在容器当中配置自己的http&#xff0c;添加web目录&#xff0c;增加主页文件等。3.查看原busybox运行容器时的默认启动程序&#xff08;原运行命令为…

java+js上传图片_java+ jsp+js 实现富文本编辑和上传图片功能

class FileManageActionController extends BaseAction{// windowsprivate String PATH_LINEs "\\";// linuxprivate String PATH_LINE "/";/*** 文件上传* param request {link HttpServletRequest}* param response {link HttpServletResponse}* retur…

Outlook接收qq的邮件

1.先去qq邮箱&#xff0c;设置&#xff0c;账户 开启pop3服务&#xff0c;假如之前开启过&#xff0c;最好关闭之后重新开启 最新版本的必须使用邮箱的独立密码才可以收取邮件 (否则就算你之前开通了&#xff0c;也无法用你的qq账号和密码收取邮件的) 2.高级设置里面&#xff0…

架构设计复杂度的6个来源

谈到架构设计&#xff0c;相信每个技术人员都耳熟能详。我总结了三个架构设计相关的特性&#xff1a; 架构设计的思维和程序设计的思维差异很大。架构设计没有体系化的培训和训练机制。程序员对架构设计的理解存在很多误区。 所以&#xff0c;虽然每个程序员心中都有一个成为架…

java swt 画按钮_向表中添加按钮(java swt)

我正在尝试复制类似于此的UI&#xff1a;我一直在关注如何创建表格每列中的按钮的作者说明(没有成功).我的项目与他的区别在于我正在尝试使用Tree而不是Table,而我正在使用eclipse TreeViewer插件进行上下文.从理论上讲,实现似乎应该是直截了当的,但我似乎无法让它发挥作用.这是…

在Windows7 下 mingw32 开发环境中采用 glut3.7 学习 OpenGL

2015年10月2日更新&#xff1a; 发现 freeglut 很好用兼容于 gut &#xff0c;而且开源还在更新中。因此我觉得放弃以前的 glut 了&#xff0c;转而用 freeglut 了。 买了本《计算机图形学第4版》想学习下图形学&#xff0c;但是书中的例子还是基于上古时期的 glut &#xff0c…

Spring Aop的应用

2019独角兽企业重金招聘Python工程师标准>>> AOP的基本概念 连接点&#xff08; Jointpoint&#xff09; &#xff1a; 表示需要在程序中插入横切关注点的扩展点&#xff0c;连接点可能是类初始化、方法执行、 方法调用、字段调用或处理异常等等&#xff0c; Spring…

Apache Tomcat 7.x 概述

前言 Tomcat 一直是Java web程序的首选应用服务器&#xff0c;现在已经更新到7.x版本了。如果你还使用老版本&#xff0c;那么你赶快更新到最新版本吧&#xff0c;他改善了不性能&#xff0c;修复了很多BUG。下面我从官网&#xff0c;简单翻译了一下7.x的特性&#xff0c;给你一…

linux mysql清除数据库所有表_MySQL修复指定数据库下的所有表

mysql,mariadb,percona这几天数据库频繁crash&#xff0c;查看日志发现类似如下的错误:[ERROR] mysqld: Table ./database/pre_forum_forumfield is marked as crashed and should be repaired1[ERROR]mysqld:Table./database/pre_forum_forumfieldismarkedascrashedandshouldb…

Java基础知识强化之IO流笔记03:throws的方式处理异常

1. 什么时候使用throws ? &#xff08;1&#xff09;定义功能方法时候&#xff0c;需要把出现的问题暴露出来&#xff0c;让调用者去处理。那么就通过throws在方法上标识。 &#xff08;2&#xff09;有时候&#xff0c;我们是可以对异常进行处理的&#xff0c;但是又有些时候…

silverlight学习之storyboard (动画)

利用silverlight的storyboard可以很方便的制作一些简单的“动画”&#xff0c;比如控制一些控件double类型或者color类型的属性值的变化。下面简单地说其中最简单的两个方面&#xff1a;DoubleAnimation&#xff08;控制控件double类型的属性&#xff09;和ColorAnimation&…

记一次Sonar执行失败的修复

为什么80%的码农都做不了架构师&#xff1f;>>> 前提 在提高代码质量方面公司采用的是JenkinsSonar的方案&#xff0c;通过设定扫描规则对现有代码工程进行扫描。代码扫描后会产生不同级别的问题&#xff0c;例如Bugs、漏洞、坏味道等。针对每个工程的发布是用…

java用if语句调用方法_J2SE中main函数中的if语句想要调用另一个类的方法怎么能实现?...

日常生活中&#xff0c;要完成一件复杂的功能&#xff0c;我们总是习惯把“大功能”分解为多个“小功能”以实现。在C程序的世界里&#xff0c;“功能”可称呼为“函数”&#xff0c;因此“函数”其实就是一段实现了某种功能的代码&#xff0c;并且可以供其它代码调用。一个程序…

Creating Apps With Material Design —— Defining Custom Animations

转载请注明 http://blog.csdn.net/eclipsexys 翻译自Developer Android&#xff0c;时间仓促&#xff0c;有翻译问题请留言指出。谢谢定义动画在材料设计动画让用户与您的应用程序进行交互时&#xff0c;为他们的行为提供反馈。并提供可视化的连续性。该材料的主题提供了一些默…

怎么剪切一段音乐其中的片段

剪切音乐想必大家都不陌生&#xff0c;在各种手机铃声中我们都需要用到它来制作个性有趣的来电铃声&#xff0c;那么大家知道有什么简便的方法使用吗&#xff1f;小编有一个办法就是利用剪切工具的功能就可以完成了&#xff0c;我们就不用不用一点一点的设置音频片段了&#xf…

无需重启, 使用Xephyr调试awesome

每次改了awesome总是心里忐忑的重新启动awesome 稍有不慎就会导致awesome加载失败 而使用默认配置加载. 对于改了一大堆快捷键绑定的人来说, 默认配置简直没法用了... 有时候还会直接起不来...需要用到killall awesome才能退回到lightdm的登录界面偶然发现xephyr这个工具 可以虚…

java程序员遇到的问题_Java 程序员平时最常遇到的故障:系统OOM (一)

作为 Java 程序员而言&#xff0c;先不考虑自己系统外部依赖的缓存、消息队列、数据库等等东西挂掉&#xff0c;就我们自己系统本身而言&#xff0c;最常见的挂掉的原因是什么&#xff1f;其实就是系统OOM&#xff0c;也就是所谓的内存溢出&#xff01;什么是内存溢出&#xff…

java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射

http://langgufu.iteye.com/blog/2107023 java处理大文件&#xff0c;一般用BufferedReader,BufferedInputStream这类带缓冲的Io类&#xff0c;不过如果文件超大的话&#xff0c;更快的方式是采用MappedByteBuffer。 MappedByteBuffer是java nio引入的文件内存映射方案&#xf…

HTML5 Canvas编写五彩连珠(3):设计

在看了几篇Canvas相关的文章后&#xff0c;发现前两节的代码实现还是有问题&#xff0c;因为知道的少&#xff0c;所以只能在自己已知的知识上做实现。不过还好&#xff0c;这是一个发现的过程&#xff0c;也是一个纠错和完善的过程。我第一次尝试一边学习一遍写博客&#xff0…

SQL面试宝典一:

1.什么是sql Injection&#xff08;sql 注入&#xff09;&#xff1f;如何防止&#xff1f; 答&#xff1a;是一种恶意将sql代码添加到输入参数中&#xff0c;传递到sql服务器解析并执行的一种攻击手法。 防止&#xff1a;1.对用户的输入进行校验&#xff0c;可以通过正则表达…

java注解的执行顺序_深入理解Spring的@Order注解和Ordered接口

前言Spring的Order注解或者Ordered接口大家都知道是控制顺序的&#xff0c;那么它们到底是控制什么顺序的&#xff1f;是控制Bean的注入顺序&#xff0c;还是Bean的实例化顺序&#xff0c;还是Bean的执行顺序呢&#xff1f;那么我们先直接给出结论再来验证结论。结论&#xff1…

数据驱动安全需三大核心新技术

要做到数据驱动安全&#xff0c;齐向东认为需要三大核心技术。第一个核心技术是大数据采集器&#xff0c;第二个是大数据引擎&#xff0c;第三个是机器学习挖掘、重要安全问题定位准确。转载于:https://www.cnblogs.com/1992825-Amelia/p/4854220.html

[转]BI 问答

http://blog.bridata.ca/?cat16 前几天Post 了一些BI 的面试问题&#xff0c;感兴趣的人很多&#xff0c;有很多人问我答案以此来评估一下自己的知识水平。坦白地说我没有写在纸上的具体答案&#xff0c;事实上每个问题也没有具体和精确的答案&#xff0c;所谓面试就不是笔试&…

没有学不会的C++:用户自定义的隐式类型转换

C 中的类型转换包含内建类型的转换和用户自定义类型的转换&#xff0c;而这两者都又可分为隐式转换和显示转换&#xff0c;所以一共有如下四象限表格中的 A、B、C、D 四种情况 隐式转换显示转换(casting)内建类型转换 (int, float ...)AB用户自定义类型转换(类 vs 类; 类 vs 内…

python scrapy菜鸟教程_scrapy学习笔记(一)快速入门

安装ScrapyScrapy是一个高级的Python爬虫框架&#xff0c;它不仅包含了爬虫的特性&#xff0c;还可以方便的将爬虫数据保存到csv、json等文件中。首先我们安装Scrapy。pip install scrapy在Windows上安装时可能会出现错误&#xff0c;提示找不到Microsoft Visual C。这时候我们…