private static String Encode(Object uri, URISetType flags)
{
String uriStr = Convert.ToString(uri);
StringBuilder resultStr = new StringBuilder();
for (int i = 0; i < uriStr.Length; i++)
{
char ch = uriStr[i];
if (GlobalObject.InURISet(ch, flags))
{
resultStr.Append(ch);
}
else
{
int value = (int)ch;
if (value >= 0 && value <= 0x7F)
{
GlobalObject.AppendInHex(resultStr, value);
}
else if (value >= 0x0080 && value <= 0x07FF)
{
GlobalObject.AppendInHex(resultStr, value >> 6 | 0xC0);
GlobalObject.AppendInHex(resultStr, value & 0x3F | 0x80);
}
else if (value < 0xD800 || value > 0xDFFF)
{
GlobalObject.AppendInHex(resultStr, value >> 12 | 0xE0);
GlobalObject.AppendInHex(resultStr, value >> 6 & 0x3F | 0x80);
GlobalObject.AppendInHex(resultStr, value & 0x3F | 0x80);
}
else
{
if (value >= 0xDC00 && value <= 0xDFFF)
{
throw new JScriptException(JSError.URIEncodeError);
}
if (++i >= uriStr.Length)
{
throw new JScriptException(JSError.URIEncodeError);
}
int value1 = (int)uriStr[i];
if (value1 < 0xDC00 || value1 > 0xDFFF)
{
throw new JScriptException(JSError.URIEncodeError);
}
value = (value - 0xD800 << 10) + value1 + 0x2400;
GlobalObject.AppendInHex(resultStr, value >> 18 | 0xF0);
GlobalObject.AppendInHex(resultStr, value >> 12 & 0x3F | 0x80);
GlobalObject.AppendInHex(resultStr, value >> 6 & 0x3F | 0x80);
GlobalObject.AppendInHex(resultStr, value & 0x3F | 0x80);
}
}
}
return(resultStr.ToString());
}