分享

关于JAVAMAIL收邮件的中文乱码问题的解决方案——总结CSDN的几种方法

 iversion 2007-06-26
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;  
      }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多