public static string EscapeUriString (string stringToEscape)
{
if (stringToEscape == null)
throw new ArgumentNullException ("stringToEscape");
if (stringToEscape.Length > MaxUriLength) {
string msg = Locale.GetText ("Uri is longer than the maximum {0} characters.");
throw new UriFormatException (msg);
}
bool escape = false;
foreach (char c in stringToEscape){
if (NeedToEscapeUriChar (c)){
escape = true;
break;
}
}
if (!escape)
return stringToEscape;
StringBuilder sb = new StringBuilder ();
byte [] bytes = Encoding.UTF8.GetBytes (stringToEscape);
foreach (byte b in bytes){
if (NeedToEscapeUriChar ((char) b))
sb.Append (HexEscape ((char) b));
else
sb.Append ((char) b);
}
return sb.ToString ();
}