public static string SubString(string demand, int length, string substitute) { demand = DataSecurity.HtmlDecode(demand); if (Encoding.Default.GetBytes(demand).Length <= length) { return(demand); } ASCIIEncoding encoding = new ASCIIEncoding(); length -= Encoding.Default.GetBytes(substitute).Length; int num = 0; StringBuilder builder = new StringBuilder(); byte[] bytes = encoding.GetBytes(demand); for (int i = 0; i < bytes.Length; i++) { if (bytes[i] == 0x3f) { num += 2; } else { num++; } if (num > length) { break; } builder.Append(demand.Substring(i, 1)); } builder.Append(substitute); return(builder.ToString()); }