java如何解析mime编码_javamail中MimeUtility解码繁体字的问题
Keyword: javamail MimeUtility 繁体字 乱码
在描述这个问题之前,先把一些包的包名,版本,用到的方法,以及大概情况贴上来,大家可以先对号入座再考虑往下看
包名:javax.mail.jar
版本:version 1.4 : 48.0, super bit
所涉及的类: javax.mail.internet.MimeUtility
类方法:javax.mail.internet.MimeUtility.decodeText(String arg0) / javax.mail.internet.MimeUtility.decodeWord(String arg0)
问题
很多人在使用javamail解析邮件主题,正文,或者附件名称的时候经常会遇到这样的问题,比如你肉眼看到的是繁体字,而解析出来的却是一个菱形的异常字符,比如��,而这种问题出现的根本问题大多数是因为MimeUtility没办法直接解码gb2312/GB2312编码的繁体字字符
不管是邮件主题,附件名还是正文,所有内容的编码都遵循以下格式:
=?gb2312?B?1/e3qCA=?=
第一个“=?”与“?”之间代表此字符串的编码
第二个“?”与"?"之间的B代表base64,如果是Q则代表 Quoted-Printable
第三个"?"与最后的“=?”之间的内容就是由前面指定的编码再由后续的转化而成的内容,例如上面是由gb2312编码转化成的字符串然后再由base64转化后的内容,包括邮件主题,附件名字以及正文,具体编码后的字符串可以查看邮件的header信息,里边包括了邮件的每个part的编码后的内容
但是问题来了,javamail中的MimeUtility.decodeText或者MimeUtility.decodeWord没办法直接解码经过gb2312编码的繁体字,首先我们来分析一下,GB2312和GBK的区别:
GB2312是一个简体中文字符集
GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准
很明显,意思就是说GB2312是GBK字符集的子集,所以假想一下,如果经过GB2312编码的简繁体字,是否可以使用GBK的编码方式解码,并且MimeUtility.decodeText/MimeUtility.decodeWord支持使用gbk解码,经过试验,证明是可以的,而且很简单,先将gb2312这个编码替换成gbk,也就是将=?和?中间的gb2312这一串替换掉,变成如下
=?gbk?B?1/e3qCA=?=
然后再使用MimeUtility.decodeText或者MimeUtility.decodeWord解码字符串,以解码经过gb2312编码的繁体中文邮件主题为例,完整代码如下:
String headerSubject = message.getHeader("subject")[0];
//此时headerSubject就类似上面的字符串=?gb2312?B?1/e3qCA=?=
headerSubject = headerSubject.replaceAll("gb2312", "gbk").replaceAll("GB2312", "gbk");
//替换gb2312/GB2312编码为gbk,然后直接用MimeUtility.decodeText解码字符串,就可以正确解码繁体字了
headerSubject = MimeUtility.decodeText(headerSubject);
——END——
作者 : Eason,专注各种技术、平台、集成,不满现状,喜欢改改改
文章、技术合作
Email : eason.lau02@hotmail.com
java如何解析mime编码_javamail中MimeUtility解码繁体字的问题相关推荐
- java邮件附件名称乱码_Javamail 中附件中文名字乱码祥解 (转)
Javamail 中附件中文名字乱码祥解 (转)[@more@]现在研究JavaMail的人越来越多,现在我就谈谈在javamail中大家都会遇到的附件中文问题,由于sun的java的中文问题,导致当 ...
- java jsoup解析html标签_Java中使用 jsoup 提取本地HTML页面的标签内容
1.引入maven依赖 org.jsoup jsoup 1.10.2 2.代码 import java.io.BufferedReader; import java.io.FileReader; im ...
- 百度APP视频播放中的解码优化
全文3514字,预计阅读时间26分钟 一.背景 在全民视频的时代,百度APP中视频播放是十分重要的业务.随着 5G 的到来,视频播放已经不满足以前的标清/高清,超清乃至于 4K 已经是旧时王谢堂前燕飞 ...
- JAVA解析各种编码密钥对(DER、PEM、openssh公钥)
http://blog.csdn.net/zhouyuqwert/article/details/8627952 一.DER编码密钥对 先说下DER编码,是因为JCE本身是支持DER编码密钥对的解析的 ...
- java der pem_JAVA解析各种编码密钥对(DER、PEM、openssh公钥)
一.DER编码密钥对 先说下DER编码,是因为JCE本身是支持DER编码密钥对的解析的,可以参见PKCS8EncodedKeySpec和X509EncodedKeySpec. DER编码是ASN.1编 ...
- java ee自动生成编码_EE Servlet 3:在Servlet中生成HTML输出
java ee自动生成编码 如果您只需要在EE Web模块中处理少量请求URI,那么在Servlet代码中生成自己HTML响应可能比使用完整的模板库更容易. 作为示例的一部分,我尝试了一个非常简单的J ...
- java jsoup解析_3使用Jsoup解析Java中HTML文件的示例
java jsoup解析 HTML是Web的核心,无论您是通过JavaScript,JSP,PHP,ASP或任何其他Web技术动态生成的,您在Internet上看到的所有页面都是基于HTML的. 您的 ...
- java 文件解析异常_java中异常的解析
Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系 ...
- 推荐2一个在Java编码过程中得心应手的工具
推荐2在编码过程中的减小不仅编码的量,挺easy工具上手:可适用Java反思与单探头Assert. 1 Mirror:Java反思 简单介绍 官网:http://projetos.vidageek.n ...
最新文章
- 上海肯特选用Ultimus 提升企业管理
- ImportError: No module named setuptools
- Silverlight Tips(1)
- 【ELK Stack】ELK+KafKa开发集群环境搭建
- bootstrap 文字加边框_word文档怎么加边框和底纹-给文档化个妆
- php中is_int用法,php – is_int()和ctype_digit()之间有区别吗?
- 2018美团CodeM编程大赛 Round A Problem 2 下棋 【贪心】
- Android自定义控件之流式布局
- mysql 临时表循环_在游标循环中查询临时表可以,但是结束循环后就无法查询了。...
- 在线图像识别相似图片_宋源:图像识别传感器在制桶设备上的应用(附视频)...
- 好看的按钮集合HTML + CSS各种好看按钮组件
- 启发式算法、寻路算法A*算法
- php limit计算结果,php – 在应用LIMIT之前获取结果数量的最佳方式
- 如何在服务器运行脚本精灵,脚本精灵循环方式教程
- 安装可视化linux界面
- 【bootcamp问答系统部署】
- 时间序列分类实践介绍(使用Python代码)
- applet java_Java applet 类
- 自我总结:找工作面试时注意事项
- 元宵节要到了,给大家猜几个谜语
热门文章
- 云服务器租赁维护合同,云服务器 租赁 服务合同
- 为什么硬盘明明还有空间,linux却说硬盘空间不足?inode;mkdir: 无法创建目录shen1: 设备上没有空间
- 知识图谱相关会议之观后感分享与学习总结
- 港中文等提出Seesaw Loss:一种面向长尾目标检测的平衡损失函数
- 关于音乐歌词下载到MP3里乱码问题的解决
- 电影TS、TC、SCR、R5、BD、HD等版本是什么意思(转)
- k8s-nexus私库
- html 强制分散对齐,强制两端对齐的函数或者CSS
- Exchange 2010 跟我走 之三-Exchange 2010 新功能
- 华为云 承诺重于泰山!