c++ 对汉字进行url编码(实验管用)

CString urlEncode(CString s)
{

 int len = s.GetLength();
 char *out = new char[len*9+1];
 memset(out , 0 , len*9+1);
 int i , j;
 int ch = 0 ;

 static char  myhex[0xFF+1][4];  //add by zhouzd 2008-10-06
 static bool isinital = false;

 if ( !isinital )
 {
  for ( i = 0 ; i <= 0xFF ; ++i )
  {
   myhex[i][0] = '%';
   sprintf( myhex[i]+1 , "%02X" , i );
  }
  isinital = true;
 }

 for (i = 0 , j = 0; i < len ; ++i )
 {
  ch = s.GetAt(i);

  //printf("%c\n" , s.GetAt(i) );

  if ('A' <= ch && ch <= 'Z')         // 'A'..'Z'
  {
   out[j++] = ch;
  }
  else if ('a' <= ch && ch <= 'z')    // 'a'..'z'
  {
   out[j++] = ch;
  }
  else if ('0' <= ch && ch <= '9')    // '0'..'9'
  {
   out[j++] = ch;
  }
  else if (ch == ' ')           // space
  {
   out[j++] = '+';
  }
  else if (ch == '-' || ch == '_'        // 不需要转化
   || ch == '.' || ch == '!'
   || ch == '~' || ch == '*'
   || ch == '\'' || ch == '('
   || ch == ')')
  {
   out[j++] = ch;
  }
  else if (ch <= 0x007f)     // ASCII控制字符
  {   
   strcat(out , myhex[ch]);
   j += 3;
  }
  else if (ch <= 0x07FF)         // 非ASCII <= 0x7FF
  {
   strcat(out , myhex[0xc0 | (ch >> 6)]);
   strcat(out , myhex[0x80 | (ch & 0x3F)]);
   j += 6;
  }
  else                       // 0x7FF < ch <= 0xFFFF
  {
   strcat(out , myhex[0xe0 | (ch >> 12)]);
   strcat(out , myhex[0x80 | ((ch >> 6) & 0x3F)]);
   strcat(out , myhex[0x80 | (ch & 0x3F)]);
   j += 9;
  }
 }
 out[j] = '\0';
 USES_CONVERSION;
 CString result = A2W(out);

 delete out;
 out = NULL;

 return result;
}

 

 

怎么查看服务器返回值?

 pHTTP->EndRequest(HSR_SYNC);
     
     char strBuff[1025] = {0};
string strHtml; //是string 不是CString
while ((pHTTP->Read((void*)strBuff, 1024)) > 0)
{
strHtml += strBuff;
}
// _cprintf("\n读取内容结束...");

int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, strHtml.c_str(), -1, NULL, 0);
WCHAR *pUnicode = new WCHAR[unicodeLen + 1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));

MultiByteToWideChar(CP_UTF8,0,strHtml.c_str(),-1, pUnicode,unicodeLen);
CString str(pUnicode); //这就是要的内容
delete []pUnicode;

 

 

 

posted @ 2012-11-23 18:27  郑文亮  阅读(2465)  评论(0编辑  收藏  举报