CString CZCJ1Dlg::Base64Encode(LPCTSTR lpszSrc)
{
ASSERT(lpszSrc != NULL && AfxIsValidString(lpszSrc));
 const char BASE64_ENCODE_TABLE[64] = {
  65,  66,  67,  68,  69,  70,  71,  72,  // 00 - 07
   73,  74,  75,  76,  77,  78,  79,  80,  // 08 - 15
   81,  82,  83,  84,  85,  86,  87,  88,  // 16 - 23
   89,  90,  97,  98,  99, 100, 101, 102,  // 24 - 31
   103, 104, 105, 106, 107, 108, 109, 110,  // 32 - 39
   111, 112, 113, 114, 115, 116, 117, 118,  // 40 - 47
   119, 120, 121, 122,  48,  49,  50,  51,  // 48 - 55
   52,  53,  54,  55,  56,  57,  43,  47 };// 56 - 63
  unsigned int iTest;
  LPCTSTR pInBuffer=lpszSrc;
  //BYTE pInBuffer=lpszSrc;// add by liujun 2006-11-08
  int nSize = (int)_tcslen(lpszSrc);
  char* pOutBuffer=new char[nSize/3*4+5];
  ZeroMemory(pOutBuffer,nSize/3*4+5);
  for(UINT i=0;i<_tcslen(lpszSrc)/3;i++)
  {    iTest = (unsigned char) *pInBuffer++;
   
   iTest = iTest << 8;
   iTest = iTest | (unsigned char) *pInBuffer++;
   iTest = iTest << 8;
   iTest = iTest | (unsigned char) *pInBuffer++;
   //&Ograve;&Ocirc;4 byte&micro;&sup1;&ETH;ò&ETH;&acute;&Egrave;&euml;&Ecirc;&auml;&sup3;&ouml;&raquo;&ordm;&sup3;&aring;
   pOutBuffer[3] = BASE64_ENCODE_TABLE[iTest & 0x3F];
   iTest = iTest >> 6;
   pOutBuffer[2] = BASE64_ENCODE_TABLE[iTest & 0x3F];
   iTest = iTest >> 6;
   pOutBuffer[1] = BASE64_ENCODE_TABLE[iTest & 0x3F];
   iTest = iTest >> 6;
   pOutBuffer[0] = BASE64_ENCODE_TABLE[iTest];
   pOutBuffer+=4;
  }
  //&Eacute;è&Ouml;&Atilde;&Icirc;&sup2;&sup2;&iquest;
  switch (_tcslen(lpszSrc) % 3)
  {
  case 0:
   break;
  case 1:
   iTest = (unsigned char) *pInBuffer;
   iTest = iTest << 4;
   pOutBuffer[1] = BASE64_ENCODE_TABLE[iTest & 0x3F];
   iTest = iTest >> 6;
   pOutBuffer[0] = BASE64_ENCODE_TABLE[iTest];
   pOutBuffer[2] = '='; //&Oacute;&Atilde;'='&Ograve;&sup2;&frac34;&Iacute;&Ecirc;&Ccedil;64&Acirc;&euml;&Igrave;&icirc;&sup3;&auml;&Ecirc;&pound;&Oacute;à&sup2;&iquest;·&Ouml;
   pOutBuffer[3] = '=';
   break;
  case 2:
   iTest = (unsigned char) *pInBuffer++;
   iTest = iTest << 8;
   iTest = iTest | (unsigned char) *pInBuffer;
   iTest = iTest << 2;
   pOutBuffer[2] = BASE64_ENCODE_TABLE[iTest & 0x3F];
   iTest = iTest >> 6;
   pOutBuffer[1] = BASE64_ENCODE_TABLE[iTest & 0x3F];
   iTest = iTest >> 6;
   pOutBuffer[0] = BASE64_ENCODE_TABLE[iTest];
   pOutBuffer[3] = '='; // Fill remaining byte.
   break;
  }
  pOutBuffer-=nSize/3*4;
  CString strEncode=pOutBuffer;
  //MessageBox(strEncode);
  delete [] pOutBuffer;
  pOutBuffer=NULL;
  return strEncode;
}