class="brush:csharp;gutter:true;">public static string Escape(string s) { StringBuilder sb = new StringBuilder(); byte[] ba = System.Text.Encoding.Unicode.GetBytes(s); for (int i = 0; i < ba.Length; i += 2) { if (ba[i + 1] == 0) { //数字,大小写字母,以及"+-*/._"不变 if ( (ba[i] >= 48 && ba[i] <= 57) || (ba[i] >= 64 && ba[i] <= 90) || (ba[i] >= 97 && ba[i] <= 122) || (ba[i] == 42 || ba[i] == 43 || ba[i] == 45 || ba[i] == 46 || ba[i] == 47 || ba[i] == 95) )//保持不变 { sb.Append(Encoding.Unicode.GetString(ba, i, 2)); } else//%xx形式 { sb.Append("%"); sb.Append(ba[i].ToString("X2")); } } else { sb.Append("%u"); sb.Append(ba[i + 1].ToString("X2")); sb.Append(ba[i].ToString("X2")); } } return sb.ToString(); }