转载——http://blog.163.com/zhangjie_0303/blog/static/9908270620148251658993/ #include <iostream>#include <stdlib.h>#include <string.h> using namespace std; typedef unsigned char BYTE; inline BYTE toHex(const BYTE &x) { return x > 9 ? x -10 + ‘A’: x + ‘0’; } inline BYTE fromHex(const BYTE &x) { return isdigit(x) ? x-‘0’ : x-‘A’+10; } inline string 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; }; inline string 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; } /*int main(int argc, char** argv){ string test_str1 = “老同学”; //string test_str2 = URLEncode(test_str1); string test_str2 = “%89%E6%B1%89%E6%B1%89”; cout << “test_str2=” << test_str2 <<endl; string test_str3 = URLDecode(test_str2); cout << “test_str3=” << test_str3 <<endl; return 0;}*/