- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[JavaMail]10详解字符编码及MimeUtility,URLDecoder,URLEncoder
一、邮件中的编码
1. Message的header
Message中的header都是只能存放ASCII码的,当邮件中有非ASCII时,例如邮件的主题是中文时,我们可以把邮件的中文主题以UTF-8(当然也可以使用其它编码,如GB2312)规则来进行编码,并以指定格式的ASCII字符串来表示。
若邮件的主题是“中”,我们想用UTF-8编码。那么“中”字的UTF-8的编码是E4 B8 AD,就用特定格式的ASCII码来表示主题“中”,则是:Subject: =?UTF-8?Q?=E4=B8=AD?=(这个是RFC2047规范的格式)。
2.BodyPart的Header
BodyPart中的Header也是只能存放ASCII码的,例如邮件的有一个附件的文件名是中文时,我们可以把附件名进行编码,并以指定格式的ASCII字符串来表示,注意差别是这时候的ASCII字符串格式和前面不同。格式:UTF-8%E4%B8%AD(这个是W3C规范的格式)。
为什么在使用一个邮件中使用两种格式,就不得而知了,可能是方便下载附件吧。
二、Message Header的编码和解码
A、编码规则
=? charset ? encoding ? encoded-text ?=
charset:字符编码
encoding:
Q Quote Printable
B BASE64
U UUENCODE
最常用的 Content-Transfer-Encoding 有 Base64 和 Quoted-Printable 两种。在对二进制文件或者中文文本进行转化时,Base64 得到的“字节串”比 Quoted-Printable 更短。在对英文文本进行转化时,Quoted-Printable 得到的“字节串”比 Base64 更短。
例1: Subject: =?GB2312?Q?=C4=E3=BA=C3?=
例2: Subject: =?utf-7?B?WFgrWUNkU0swNE9kbjVPRVZiKy0z?=
B、ernet.MimeUtility
public class MimeUtility
这是一个工具类,提供各种MIME相关的功能。
该类有一组根据RFC2047规范来对MIME头进行编码和解码的方法。请注意,在一般情况下,这些方法并不需要被使用,如setSubject和setRecipients时。使用这些“高层次”方法时JavaMail会自动编码和解码。这些方法只有在使用setHeader及getHeader方法操作MIME头时才需要被使用。
RFC 822规定邮件头只能包含US-ASCII字符。当包含有非US-ASCII字符的邮件头必须进行编码以使邮件头只包含US-ASCII字符。基本上,这个过程涉及使用Base64或QP规则来编码某些字符。 RFC 2047中详细说明了这一点。
在JAVA中String是16为unicode字符。ASCII是Unicode的一个子集(占用范围0 - 127)。一个只包含ASCII字符的String是邮件安全的。若String含有非ASCII字符则必须进行编码。此步骤增加了一个额外的复杂性,是因为Unicode还不是一种广泛使用的字符集,有人可能首先想到把String的字符集编码转换成其它一种字符集编码,然后来进行传输。请注意,要获得邮件安全字符串的实际字节(例如,通过SMTP发送),必须做的是:
byte[] bytes = string.getBytes(iso-8859-1);
假设MimeMessage、MimeBodyPart的setHeader和AddHeader方法给header赋的值是一个只包含US-ASCII字符的Unicode字符串。那么这些方法的调用者必须确保他们传递的值不包含非US-ASCII字符。这个类的方法帮忙做这些事情。
MimeMessage、MimeBodyPart的getHeader方法获取header的值时。这些值是按RFC 2047规范编码的,那么就必须解码为Unicode编码。这个类的方法帮忙做这些事情。
几个系统属性严格控制MIME规范的一致性。请注意,这些都不是session的属性,但必须设置为全局系统属性。
mail.mime.decodetext.strict属性控制MIME编码字符的解码。MIME规范要求,编码字符必须以一个空白分隔符为开始。一些邮件错误的包含了编码字符在一个词的中间。如果mail.mime.decodetext.strict系统属性设置为false,系统就会企图解码这些非法的编码字符。默认值是true。
mail.mime.encodeeol.strict属性控制非”text”类型的MIME Part的Content-Transfe
您可能关注的文档
最近下载
- 《产品质量鉴定程序规范 总则》.pdf VIP
- 沪科版九年级物理公式复习.pdf VIP
- AQ∕T 2063-2018 金属非金属露天矿山高陡边坡安全监测技术规范(可复制版).pdf
- 高速公路无人机自动巡检可行性探究.pdf VIP
- CR4012022机器人CR认证可靠性等级认证实施细则.pdf
- 再生水管道阀门选型与管理.doc VIP
- 某公司办公区生活区消防检查记录表.docx VIP
- 人教版高一数学必修一练习题-高一数学人教版必修一《集合》练习题3.doc VIP
- 智慧方案光储充一体化系统解决方案.pptx VIP
- IPC-TM-650测试方法手册CN2020最新(104个方法)扫描版.pdf VIP
文档评论(0)