URLEncode:是指针对网页url中的中文字符的一种编码转化方式,最常见的就是Baidu、Google等搜索引擎中输入中文查询时候,生成经过Encode过的网页URL。
URLEncode的方式一般有两种,一种是传统的基于GB2312的Encode(Baidu、Yisou等使用),另一种是基于UTF-8的Encode(Google、Yahoo等使用)。
C++实现:
GB2312的Encode:
- std::string CStringUtil::URLEncode( const string &sIn )
- {
- string sOut;
- for( size_t ix = 0; ix < sIn.size(); ix++ )
- {
- BYTE buf[4];
- memset( buf, 0, 4 );
- if( isalnum( (BYTE)sIn[ix] ) )
- {
- buf[0] = sIn[ix];
- }
- //else if ( isspace( (BYTE)sIn[ix] ) ) //貌似把空格编码成%20或者+都可以
- //{
- // buf[0] = '+';
- //}
- else
- {
- buf[0] = '%';
- buf[1] = toHex( (BYTE)sIn[ix] >> 4 );
- buf[2] = toHex( (BYTE)sIn[ix] % 16);
- }
- sOut += (char *)buf;
- }
- return sOut;
- }
- std::string CStringUtil::URLDecode( const string &sIn )
- {
- string sOut;
- for( size_t ix = 0; ix < sIn.size(); ix++ )
- {
- BYTE ch = 0;
- if(sIn[ix]=='%')
- {
- ch = (fromHex(sIn[ix+1])<<4);
- ch |= fromHex(sIn[ix+2]);
- ix += 2;
- }
- else if(sIn[ix] == '+')
- {
- ch = ' ';
- }
- else
- {
- ch = sIn[ix];
- }
- sOut += (char)ch;
- }
- return sOut;
- }
2.UTF-8的Encode
先把字符串转为UTF-8编码。再调用以上函数。
stringToUTF8, UTF8Tostring
附:
一个查看编码结果的网址:http://tool.chinaz.com/Tools/URLEncode.aspx
“中文” GB2312的Encode:%d6%d0%ce%c4
“中文” UTF-8的Encode: %e4%b8%ad%e6%96%87
转载于:https://blog.51cto.com/longma2006/1101684