public static string PercentEncode(string s)
{
var bytes = Encoding.UTF8.GetBytes(s);
var sb = new StringBuilder();
foreach (var b in bytes)
{
if ((b > 7 && b < 11) || b == 13)
{
sb.Append(string.Format("%0{0:X}", b));
}
else
{
sb.Append(string.Format("%{0:X}", b));
}
}
return sb.ToString();
}