JAVA网页设计JavaMail 之 根绝邮件乱码
为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。我一向想欠亨,RFC822尺度都公布几年了,为何另有那末多不切合标准的email呈现呢?一来大概是服务器的成绩,二来就是不卖力任的程序员的错了。以是我俄然意想到,不是只要冷血无情的老板和不可一世的客户让程序员的身心饱受培植,偕行的不经意或经意也在加重着危险。我面临着一份邮件原文收回以上的感伤,客户埋怨该邮件收到的时分在体系中注释显现是乱码。这是一份典范的分歧标准的邮件:Content-Type:text/plain,没有申明charset,而接上去的注释间接就是未举行任何编码的中文笔墨。不外Subject倒是切合标准的(=?gb2312?B?xxxxxxx?=)。
行行色色的分歧标准的邮件见过很多,最多见的就是某些header未编码,另有的大概就是,Body编码了而Subject未编码,最厌恶的就是整份Email都没有编码信息。
恨回恨,成绩仍是得办理,我修正了代码,处置逻辑以下:
1.在最入手下手剖析邮件的时分,先剖析某些大概带有编码信息的header,并纪录为headerCharset;部分代码以下:
privatestaticPatternencodeStringPattern=Pattern.compile("=?(.+)?(B|Q)?(.+)?=",Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
privatefinalString[]CHARTSET_HEADER=newString[]{"Subject","From","To","Cc","Delivered-To"};
..........
Enumerationenum=message.getMatchingHeaderLines(CHARTSET_HEADER);
while(enum.hasMoreElements()){
Stringheader=(String)enum.nextElement();
Matcherm=encodeStringPattern.matcher(header);
if(m.find()){
this.headCharset=m.group(1);
log.debug("guessmailcharsetis"+this.headCharset);
break;
}
}
2.接着剖析邮件体,找到Body的时分,看看是不是指明charset信息;假如指定了,纪录为bodyCharset;假如没有,利用headerCharset,假如headerCharset也是null,利用默许charset。一般是ISO-8859-1。
3.最初再处置邮件header,假如没有charset信息,利用bodyCharset,不然利用默许charset。
以上的办理计划,只需邮件的Body大概Header中的一个供应了编码信息,那末都大概能够制止乱码的发生,假如哪份遭千杀的邮件,Body用gb2312编码,Subject倒是未编码的日文,那我只能长叹被击败了。假如整份邮件都没有编码信息的话,除非你断定邮件都是指定的编码并举行转码,不然只要任天由命。
最初仍是要号令一声,请遵守标准!
还得说上一点,就java本质而言,是面相对象的,但是你有没有发现,java也不全是,比如说基本类型,int,那他就是整型而不是对象,转换类型是还得借助包装类。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 是一种为 Internet发展的计算机语言 是一种使网页(Web Page)产生生动活泼画面的语言 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 Java 编程语言的风格十分接近C、C++语言。 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
页:
[1]