1。
用于发邮件 很多朋友都使用过JavaMail进行邮件发送,在邮件正文中的乱码容易解决。但邮件主题的乱码无论怎样转码总是显示一堆乱码。到底应该怎么处理呢? JavaMail中的邮件主题需要进行BASE64编码,格式形如: =?GB2312?B?xPq1xMPcwuvS0b6t1tjWw6Osx+u+ob/stcfCvKOssqLQ3rjEw9zC66Oh?= 所以,直接使用msg.setSubject("中文主题"),或者msg.setSubject("中文主题".getBytes("8859_1"), "GB2312"))都一样会出现乱码。在设置邮件主题前需要将主题字串的字节编码为BASE64格式,并添加编码头,示例代码如下: sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder(); msg.setSubject("=?GB2312?B?"+enc.encode(subject.getBytes())+"?=");
下面用于收邮件
String subject = m.getSubject(); m.setContent(subject, "text/html; charset=gb2312");//用于发邮件 2。 subject = new String(subject.getBytes("ISO8859_1")); subject = new String(subject.getBytes("gb2312"),"ISO8859_1"); 也不行啊,乱码依旧。 解决方法:
subject = new String(subject.getBytes("iso-8859-1"),"GB2312"); 3。 javamail在jsp中调用 目前JAVAMAIL支持的汉字编码方式有 gb2312,GBK,utf-8,iso-88 59-1,us-assic共5种,解码的函数在类MimeUtility中,叫做decodeText,如果采用前三种方式 ,直接得到中文。后两种还需要自己再编个小函数解码,才能显示中文, javamail里的getS ubject()会自动解码,但不会区分是否需要getstr,所以不直接使用getSubject(),而应该使用 getHeader() 函数如下:(附例子,是经过修改的getSubject) public static String getstr(String str) { try { String temp_p=str; byte[] temp_t=temp_p.getBytes(“ISO8859-1“); String temp=new String(temp_t); return temp; } catch(Exception e) { return ““; } } 例子: public String getsubject(message m) throws Exception { boolean bgetstr; String temps; String[] ta1=m.getHeader(“Subject“); String _subject; if (ta1!=null) _subject=ta1[0]; else _subject=““; if (_subject.indexOf(“=?gb2312“)!=-1 ¦¦ _subject.indexOf(“=?GBK“)!=-1 ¦¦ _subject.indexOf(“=?utf-8“)!=-1) bgetstr=false; else bgetstr=true; try{ temps=MimeUtility.decodeText(_subject); } catch(UnsupportedEncodingException E) { return _subject; } if (temps.length()==0) { temps=“(无主题)“; bgetstr=false; } if (bgetstr==false) return temps; else return getstr(temps); } 很麻烦,不好用。 public static String getstr(String string){
String returnValue=""; try{ if (string!=null){ returnValue=new String(string.getBytes("iso-8859-1"),"GB2312"); } }catch(Exception e){} return null; } |
|