难道字符表不同也叫Base64?????

解决方案 »

  1.   

    sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder(); msg.setSubject("=?GB2312?B?"+enc.encode(subject.getBytes())+"?=");
    一个进行Base64编码的类  --------------------------------------------------------------------------------
    源作者:sonymusic                   人气:5543  
     
     
    package sony.utils; import java.io.*; 
    import java.net.*; 
    public final class Codes { 
    public final static byte[] base64Encode(byte[] byteData) { 
    if (byteData == null) 
    return null; 
    int iSrcIdx; // index into source (byteData) 
    int iDestIdx; // index into destination (byteDest) 
    byte byteDest[] = new byte[((byteData.length + 2) / 3) * 4]; for (iSrcIdx = 0, iDestIdx = 0; iSrcIdx < byteData.length - 2; iSrcIdx += 3) { 
    byteDest[iDestIdx++] = (byte) ((byteData[iSrcIdx] >>> 2) & 077); 
    byteDest[iDestIdx++] = 
    (byte) ((byteData[iSrcIdx + 1] >>> 4) & 017 | (byteData[iSrcIdx] << 4) & 077); 
    byteDest[iDestIdx++] = 
    (byte) ((byteData[iSrcIdx + 2] >>> 6) 
    & 003 
    | (byteData[iSrcIdx + 1] << 2) 
    & 077); 
    byteDest[iDestIdx++] = (byte) (byteData[iSrcIdx + 2] & 077); 
    } if (iSrcIdx < byteData.length) { 
    byteDest[iDestIdx++] = (byte) ((byteData[iSrcIdx] >>> 2) & 077); 
    if (iSrcIdx < byteData.length - 1) { 
    byteDest[iDestIdx++] = 
    (byte) ((byteData[iSrcIdx + 1] >>> 4) & 017 | (byteData[iSrcIdx] << 4) & 077); 
    byteDest[iDestIdx++] = (byte) ((byteData[iSrcIdx + 1] << 2) & 077); 
    } else 
    byteDest[iDestIdx++] = (byte) ((byteData[iSrcIdx] << 4) & 077); 
    } for (iSrcIdx = 0; iSrcIdx < iDestIdx; iSrcIdx++) { 
    if (byteDest[iSrcIdx] < 26) 
    byteDest[iSrcIdx] = (byte) (byteDest[iSrcIdx] + &acute;A&acute;); 
    else 
    if (byteDest[iSrcIdx] < 52) 
    byteDest[iSrcIdx] = (byte) (byteDest[iSrcIdx] + &acute;a&acute; - 26); 
    else 
    if (byteDest[iSrcIdx] < 62) 
    byteDest[iSrcIdx] = (byte) (byteDest[iSrcIdx] + &acute;0&acute; - 52); 
    else 
    if (byteDest[iSrcIdx] < 63) 
    byteDest[iSrcIdx] = (byte) &acute;+&acute;; 
    else 
    byteDest[iSrcIdx] = (byte) &acute;/&acute;; 
    } for (; iSrcIdx < byteDest.length; iSrcIdx++) 
    byteDest[iSrcIdx] = (byte) &acute;=&acute;; return byteDest; 

    public final static String base64Encode(String strInput) { 
    if (strInput == null) 
    return null; 
    return base64Encode(strInput,"GB2312"); 

    public final static String base64Encode(String strInput,String charSet) { 
    if (strInput == null) 
    return null; 
    String strOutput=null; 
    byte byteData[] = new byte[strInput.length()]; 
    try { 
    //strInput.getBytes(0, strInput.length(), byteData, 0); 
    byteData = strInput.getBytes(charSet); 
    strOutput=new String(base64Encode(byteData),charSet); 
    //strOutput=new String(base64Encode(byteData),0); 
    } catch (UnsupportedEncodingException e) { 
    return null; 

    return strOutput; 

    /** 
    * 此处插入方法说明。 
    * 创建日期:(2000-11-4 18:27:35) 
    * @param steam java.io.InputStream 
    * @param charSet java.lang.String 
    */ 
    public final static String base64Encode(InputStream in, String charSet) { 
    try { 
    int c; 
    byte[] buff = new byte[1024]; 
    ByteArrayOutputStream out = new ByteArrayOutputStream(2048); 
    while ((c = in.read(buff, 0, 1024)) != -1) { 
    out.write(buff, 0, c); 
    //index+=1024; 
    //out.write(c); 
    //attachContent+=ss; 

    in.close(); 
    out.flush(); 
    byte[] tmp2 = Codes.base64Encode(out.toByteArray()); 
    out.close(); 
    return new String(tmp2,charSet); 

    catch (IOException e) { 
    return ""; 

    }/** 
    * 此处插入方法说明。 
    * 创建日期:(2000-11-3 23:31:04) 
    * @return java.lang.String 
    * @param strIn java.lang.String 
    */ 
    public final static String chunkSplit(String strIn) { 
    return chunkSplit(strIn,76); 
    }/** 
    * 此处插入方法说明。 
    * 创建日期:(2000-11-3 23:31:04) 
    * @return java.lang.String 
    * @param strIn java.lang.String 
    */ 
    public final static String chunkSplit(String strIn,int splitLen) { 
    int index=0; 
    String strOut=""; 
    while(index+splitLen<strIn.length()){ 
    strOut+=strIn.substring(index,index+splitLen)+"\n"; 
    index+=splitLen; 

    if(index<strIn.length()){ 
    strOut+=strIn.substring(index); 

    return strOut; 

    }
     
     
      

  2.   

    to zealVampire(蚊子)两种方法都报错
    说没有enc.encode()方法下面这几句我看不懂,编译报错
    byteDest[iSrcIdx] = (byte) (byteDest[iSrcIdx] + &acute;A&acute;); 
    else 
    if (byteDest[iSrcIdx] < 52) 
    byteDest[iSrcIdx] = (byte) (byteDest[iSrcIdx] + &acute;a&acute; - 26); 
    else 
    if (byteDest[iSrcIdx] < 62) 
    byteDest[iSrcIdx] = (byte) (byteDest[iSrcIdx] + &acute;0&acute; - 52); 
    else 
    if (byteDest[iSrcIdx] < 63) 
    byteDest[iSrcIdx] = (byte) &acute;+&acute;; 
    else 
    byteDest[iSrcIdx] = (byte) &acute;/&acute;;
      

  3.   

    Base64遇到中文时,具体如何处理呢?
      

  4.   

    用javax.mail.internet.MimeUtility,如:
    String subject = "=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=\r\n=?ISO-8859-1?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=";
    System.out.println(MimeUtility.decodeText(subject));System.out.println(MimeUtility.decodeText("=?GBK?B?1tDOxA==?=")); //中文
      

  5.   

    问题解决了
    不知为什么,中文编码结果最后都要-128我还是用我自己实现的Base64编码解码器吧谢谢各位的帮助结帖
      

  6.   

    import java.net.*;
    import java.io.*;
    import java.util.*; 
     
    //enc.encode()方法 有的
    //我不用javaMail发邮件的时候就是用他将用户名和密码转换成Base64的