using System.Collections.Generic;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters;
public static class HttpUtility
public static Encoding DEFAULT_ENCODING = Encoding.UTF8;
public static char[] URL_ENTITY = { '/', ':', ';', '<' , '=', '>', '?', '@',
'[', '\\', ']', '^', '`', '{', '|', '}' };
public static string UrlEncodeByte(byte b)
return String.Format("%{0:x2}", b);
public static string UrlEncodeBytes(byte[] b, int startIndex = 0, int offset = 0)
if (b == null) throw new NullReferenceException();
StringBuilder sb = new StringBuilder(b.Length * 3);
foreach (byte _b in b) sb.AppendFormat("%{0:x2}, _b");
public static string UrlEncodeString(string s)
return UrlEncodeString(s, DEFAULT_ENCODING);
public static string UrlEncodeString(string s, Encoding e)
StringBuilder sb = new StringBuilder();
if ((c < 128 || c == 126) && (!URL_ENTITY.Contains(c) && !(c >= 0 && c <= 44) && !(c >= 123 && c <= 127)))
byte[] b = e.GetBytes(new char[] { c, });
sb.Append(UrlEncodeBytes(b));
public static void Main()
Console.WriteLine((string)(char)(new byte()));