[javamail]10详解字符编码和mimeutilityurldecoderurlencoder

[javamail]10详解字符编码和mimeutilityurldecoderurlencoder

ID:8802300

大小:36.75 KB

页数:9页

时间:2018-04-08

[javamail]10详解字符编码和mimeutilityurldecoderurlencoder_第1页
[javamail]10详解字符编码和mimeutilityurldecoderurlencoder_第2页
[javamail]10详解字符编码和mimeutilityurldecoderurlencoder_第3页
[javamail]10详解字符编码和mimeutilityurldecoderurlencoder_第4页
[javamail]10详解字符编码和mimeutilityurldecoderurlencoder_第5页
资源描述:

《[javamail]10详解字符编码和mimeutilityurldecoderurlencoder》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、一、邮件中的编码1.Message的headerMessage中的header都是只能存放ASCII码的,当邮件中有非ASCII时,例如邮件的主题是中文时,我们可以把邮件的中文主题以UTF-8(当然也可以使用其它编码,如GB2312)规则来进行编码,并以指定格式的ASCII字符串来表示。若邮件的主题是“中”,我们想用UTF-8编码。那么“中”字的UTF-8的编码是E4B8AD,就用特定格式的ASCII码来表示主题“中”,则是:Subject:=?UTF-8?Q?=E4=B8=AD?=(这个是RFC2047规范的格式)。2.BodyP

2、art的HeaderBodyPart中的Header也是只能存放ASCII码的,例如邮件的有一个附件的文件名是中文时,我们可以把附件名进行编码,并以指定格式的ASCII字符串来表示,注意差别是这时候的ASCII字符串格式和前面不同。格式:UTF-8''%E4%B8%AD(这个是W3C规范的格式)。为什么在使用一个邮件中使用两种格式,就不得而知了,可能是方便下载附件吧。二、MessageHeader的编码和解码A、编码规则"=?"charset"?"encoding"?"encoded-text"?="charset:字符编码enco

3、ding:Q---QuotePrintableB---BASE64U---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?WFgrWUNkU0sw

4、NE9kbjVPRVZiKy0z?=B、javax.mail.internet.MimeUtilitypublicclassMimeUtility这是一个工具类,提供各种MIME相关的功能。该类有一组根据RFC2047规范来对MIME头进行编码和解码的方法。请注意,在一般情况下,这些方法并不需要被使用,如setSubject和setRecipients时。使用这些“高层次”方法时JavaMail会自动编码和解码。这些方法只有在使用setHeader及getHeader方法操作MIME头时才需要被使用。RFC822规定邮件头只能包含U

5、S-ASCII字符。当包含有非US-ASCII字符的邮件头必须进行编码以使邮件头只包含US-ASCII字符。基本上,这个过程涉及使用Base64或QP规则来编码某些字符。RFC2047中详细说明了这一点。在JAVA中String是16为unicode字符。ASCII是Unicode的一个子集(占用范围0-127)。一个只包含ASCII字符的String是邮件安全的。若String含有非ASCII字符则必须进行编码。此步骤增加了一个额外的复杂性,是因为Unicode还不是一种广泛使用的字符集,有人可能首先想到把String的字符集编码

6、转换成其它一种字符集编码,然后来进行传输。请注意,要获得邮件安全字符串的实际字节(例如,通过SMTP发送),必须做的是:byte[]bytes=string.getBytes("iso-8859-1");假设MimeMessage、MimeBodyPart的setHeader和AddHeader方法给header赋的值是一个只包含US-ASCII字符的Unicode字符串。那么这些方法的调用者必须确保他们传递的值不包含非US-ASCII字符。这个类的方法帮忙做这些事情。MimeMessage、MimeBodyPart的getHead

7、er方法获取header的值时。这些值是按RFC2047规范编码的,那么就必须解码为Unicode编码。这个类的方法帮忙做这些事情。几个系统属性严格控制MIME规范的一致性。请注意,这些都不是session的属性,但必须设置为全局系统属性。mail.mime.decodetext.strict属性控制MIME编码字符的解码。MIME规范要求,编码字符必须以一个空白分隔符为开始。一些邮件错误的包含了编码字符在一个词的中间。如果mail.mime.decodetext.strict系统属性设置为false,系统就会企图解码这些非法的编码

8、字符。默认值是true。mail.mime.encodeeol.strict属性控制非”text”类型的MIMEPart的Content-Transfer-Encoding的选择。如果在mail.mime.encodeeol.stri

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。