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解码繁体字的问题相关推荐

  1. java邮件附件名称乱码_Javamail 中附件中文名字乱码祥解 (转)

    Javamail 中附件中文名字乱码祥解 (转)[@more@]现在研究JavaMail的人越来越多,现在我就谈谈在javamail中大家都会遇到的附件中文问题,由于sun的java的中文问题,导致当 ...

  2. java jsoup解析html标签_Java中使用 jsoup 提取本地HTML页面的标签内容

    1.引入maven依赖 org.jsoup jsoup 1.10.2 2.代码 import java.io.BufferedReader; import java.io.FileReader; im ...

  3. 百度APP视频播放中的解码优化

    全文3514字,预计阅读时间26分钟 一.背景 在全民视频的时代,百度APP中视频播放是十分重要的业务.随着 5G 的到来,视频播放已经不满足以前的标清/高清,超清乃至于 4K 已经是旧时王谢堂前燕飞 ...

  4. JAVA解析各种编码密钥对(DER、PEM、openssh公钥)

    http://blog.csdn.net/zhouyuqwert/article/details/8627952 一.DER编码密钥对 先说下DER编码,是因为JCE本身是支持DER编码密钥对的解析的 ...

  5. java der pem_JAVA解析各种编码密钥对(DER、PEM、openssh公钥)

    一.DER编码密钥对 先说下DER编码,是因为JCE本身是支持DER编码密钥对的解析的,可以参见PKCS8EncodedKeySpec和X509EncodedKeySpec. DER编码是ASN.1编 ...

  6. java ee自动生成编码_EE Servlet 3:在Servlet中生成HTML输出

    java ee自动生成编码 如果您只需要在EE Web模块中处理少量请求URI,那么在Servlet代码中生成自己HTML响应可能比使用完整的模板库更容易. 作为示例的一部分,我尝试了一个非常简单的J ...

  7. java jsoup解析_3使用Jsoup解析Java中HTML文件的示例

    java jsoup解析 HTML是Web的核心,无论您是通过JavaScript,JSP,PHP,ASP或任何其他Web技术动态生成的,您在Internet上看到的所有页面都是基于HTML的. 您的 ...

  8. java 文件解析异常_java中异常的解析

    Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系 ...

  9. 推荐2一个在Java编码过程中得心应手的工具

    推荐2在编码过程中的减小不仅编码的量,挺easy工具上手:可适用Java反思与单探头Assert. 1 Mirror:Java反思 简单介绍 官网:http://projetos.vidageek.n ...

最新文章

  1. 上海肯特选用Ultimus 提升企业管理
  2. ImportError: No module named setuptools
  3. Silverlight Tips(1)
  4. 【ELK Stack】ELK+KafKa开发集群环境搭建
  5. bootstrap 文字加边框_word文档怎么加边框和底纹-给文档化个妆
  6. php中is_int用法,php – is_int()和ctype_digit()之间有区别吗?
  7. 2018美团CodeM编程大赛 Round A Problem 2 下棋 【贪心】
  8. Android自定义控件之流式布局
  9. mysql 临时表循环_在游标循环中查询临时表可以,但是结束循环后就无法查询了。...
  10. 在线图像识别相似图片_宋源:图像识别传感器在制桶设备上的应用(附视频)...
  11. 好看的按钮集合HTML + CSS各种好看按钮组件
  12. 启发式算法、寻路算法A*算法
  13. php limit计算结果,php – 在应用LIMIT之前获取结果数量的最佳方式
  14. 如何在服务器运行脚本精灵,脚本精灵循环方式教程
  15. 安装可视化linux界面
  16. 【bootcamp问答系统部署】
  17. 时间序列分类实践介绍(使用Python代码)
  18. applet java_Java applet 类
  19. 自我总结:找工作面试时注意事项
  20. 元宵节要到了,给大家猜几个谜语

热门文章

  1. 云服务器租赁维护合同,云服务器 租赁 服务合同
  2. 为什么硬盘明明还有空间,linux却说硬盘空间不足?inode;mkdir: 无法创建目录shen1: 设备上没有空间
  3. 知识图谱相关会议之观后感分享与学习总结
  4. 港中文等提出Seesaw Loss:一种面向长尾目标检测的平衡损失函数
  5. 关于音乐歌词下载到MP3里乱码问题的解决
  6. 电影TS、TC、SCR、R5、BD、HD等版本是什么意思(转)
  7. k8s-nexus私库
  8. html 强制分散对齐,强制两端对齐的函数或者CSS
  9. Exchange 2010 跟我走 之三-Exchange 2010 新功能
  10. 华为云 承诺重于泰山!