StringBuilder sb = new StringBuilder(); int len = str.Length;
for (int i = 0; i < len; i++) { char c = str[i];
//everything other than the optionally escaped chars _must_ be escaped if (Char.IsLetterOrDigit(c) || c == ''-'' || c == ''_'' || c == ''/'' || c == ''\\'' || c == ''.'') sb.Append(c); else sb.Append(Uri.HexEscape(c)); }
StringBuilder sb = new StringBuilder(); int len = str.Length; int i = 0; while (i != len) { if (Uri.IsHexEncoding(str, i)) sb.Append(Uri.HexUnescape(str, ref i)); else sb.Append(str[i++]); }