VC is unicode encoded,
Non-unicode encoding not considered!
Char hexs [] = {'0', '1', '2', '3', '4', '5', '6', '7 ', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F '};
Cstring urlencode (cstring Sin)
{
Cstring sout;
Int nlen = sin. getlength ();
Pbyte pinbuf = (pbyte) sin. getbuffer (0 );
Byte * poutbuf = new byte [nlen * 7];
Memset (poutbuf, 0, nlen * 7 );
Int n = 0;
Byte A, B;
For (INT I = 0; I <nlen; I ++)
{Byte A = pinbuf [I * 2];
Byte B = pinbuf [I * 2 + 1];
If (B> 0)
{
Poutbuf [n ++] = '% ';
Poutbuf [n ++] = 'U ';
A = B & 0xf;
B = (B & 0xf0)> 4;
Poutbuf [n ++] = hexs [B];
Poutbuf [n ++] = hexs [a];
A = A & 0xf;
B = (A & 0xf0)> 4;
Poutbuf [n ++] = hexs [B];
Poutbuf [n ++] = hexs [a];
}
Else if (a <'*' | A = ',' | (A> '9' & A <'@') | (A> 'Z' & A <'_') | A = ''' | A> 'Z ')
{
Poutbuf [n ++] = '% ';
A = A & 0xf;
B = (A & 0xf0)> 4;
Poutbuf [n ++] = hexs [B];
Poutbuf [n ++] = hexs [a];
}
Else
{
Poutbuf [n ++] =;
}
}
Sout = cstring (poutbuf );
Sin. releasebuffer ();
Delete [] poutbuf;
Return sout;
}