简单的工作室

当前位置: 主页>编程技巧>VC++编程>

对URL进行编码(UTF-8)

时间:2014-07-25 11:28来源:http://blog.csdn.net/mynamelj/ 作者:mynamelj 点击:
最近由于项目需要,写了一个函数专门对URL里的中文参数行编码,网页那边是用的UTF-8编码集的,所以在编码之前必须把字符串转换成UTF-8的再进编码。 大家都知道在URL地址里是不可传中文字符的,因此如果你要URL地址里传带有中文字符的参数那就必须对它进行编码。其实编码

 最近由于项目需要,写了一个函数专门对URL里的中文参数行编码,网页那边是用的UTF-8编码集的,所以在编码之前必须把字符串转换成UTF-8的再进编码。

 

     大家都知道在URL地址里是不可传中文字符的,因此如果你要URL地址里传带有中文字符的参数那就必须对它进行编码。其实编码是很简单的,只是将字符串中的每个字符转换成16进制的用%隔开就行了。注意我这个函数是UTF-8的,如果你需要其它编码集的可以自行修改,最重要的是明白它是怎样进行编码的。

 


[cpp] view plaincopy
  1. int URLEncode(LPCTSTR pszUrl, LPTSTR pszEncode, int nEncodeLen)  
  2. {  
  3.     if( pszUrl == NULL )  
  4.         return 0;  
  5.   
  6.     if( pszEncode == NULL || nEncodeLen == 0 )  
  7.         return 0;  
  8.   
  9.     //定义变量  
  10.     int nLength = 0;  
  11.     WCHAR* pWString = NULL;  
  12.     TCHAR* pString = NULL;  
  13.   
  14.     //先将字符串由多字节转换成UTF-8编码  
  15.     nLength = MultiByteToWideChar(CP_ACP, 0, pszUrl, -1, NULL, 0);  
  16.   
  17.     //分配Unicode空间  
  18.     pWString = new WCHAR[nLength];  
  19.       
  20.     //先转换成Unicode  
  21.     MultiByteToWideChar(CP_ACP, 0, pszUrl, -1, pWString, nLength);  
  22.   
  23.     //分配UTF-8空间  
  24.     nLength = WideCharToMultiByte(CP_UTF8, 0, pWString, -1, NULL, 0, NULL, NULL);  
  25.     pString = new TCHAR[nLength];  
  26.   
  27.     //Unicode转到UTF-8  
  28.     nLength = WideCharToMultiByte(CP_UTF8, 0, pWString, -1, pString, nLength, NULL, NULL);  
  29.   
  30.     static char hex[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};  
  31.     memset(pszEncode, 0, nEncodeLen/sizeof(TCHAR));  
  32.   
  33.     for( int i = 0; i < nLength-1; i++ )  
  34.     {  
  35.         unsigned char c = pString[i];  
  36.         if( c > 0x20 && c < 0x7f )    // 数字或字母  
  37.         {  
  38.             *pszEncode++ = c;  
  39.         }  
  40.         else if( c == 0x20 )        // 包含空格  
  41.         {  
  42.             *pszEncode++ = '+';  
  43.         }  
  44.         else                        // 进行编码  
  45.         {  
  46.             *pszEncode++ = '%';  
  47.             *pszEncode++ = hex[c / 16];  
  48.             *pszEncode++ = hex[c % 16];  
  49.         }  
  50.     }  
  51.   
  52.     //删除内存  
  53.     delete pWString;  
  54.     delete pString;  
  55.   
  56.     return nLength;  
  57. }  


 

用法介绍:

TCHAR szText[] = TEXT("我爱你");

TCHAR szEncode[255];

 

URLEncode(szText, szEncode, sizeof(szEncode));

 

编码后的字符串就存储在szEncode数组中。

(责任编辑:简单的工作室)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容