public static string PathSegmentEncode(string str, Encoding e) { var pathEncoded = new StringBuilder(); var characters = new CharacterEnumerator(str); while (characters.MoveNext()) { var character = characters.Current; if (Regex.IsMatch(character, @"^[A-Za-z0-9\-._~!$&'()*+,;=:@]$")) { pathEncoded.Append(character); } else { var bytes = e.GetBytes(character); foreach (var b in bytes) { pathEncoded.Append('%'); pathEncoded.Append(b.ToString("X2")); } } } return(pathEncoded.ToString()); }
public static string Encode(string value, Encoding encoding) { var uriEncoding = new StringBuilder(); var characters = new CharacterEnumerator(value); while (characters.MoveNext()) { if (characters.Current.Length == 1 && Unreserved.Contains(characters.Current[0])) { uriEncoding.Append(characters.Current); } else { foreach (var b in encoding.GetBytes(characters.Current)) { uriEncoding.Append('%'); uriEncoding.Append(b.ToString("X2")); } } } return(uriEncoding.ToString()); }