public static string Intercept(string input, int p)
        {
            Encoding encode = Encoding.GetEncoding("gb2312");
            byte[] byteArr = encode.GetBytes(input);
            if (byteArr.Length <= p) return input;
            int m = 0, n = 0;
            foreach (byte b in byteArr)
            {
                if (n >= p) break;
                if (b > 127) m++; //重要一步:对前p个字节中的值大于127的字符进行统计
                n++;
            }
            if (m % 2 != 0) n = p + 1; //如果非偶:则说明末尾为双字节字符,截取位数加1
            return encode.GetString(byteArr, 0, n);
        }
 
public static string Intercept(string input, int len)
        {
            int i = 0, j = 0, l = input.Length;
            for (; i < l;i++ )
            {
                if (j >= len) break;
                if ((int)input[i] > 127)
                    j += 2;
                else
                    j++;
            }
            if (i == l)
                return input.Substring(0, i);
            else
                return input.Substring(0, i) + "...";
        }
        public static string Truncate(string input, int length)
        {
            int count = input.Length;
            int index = 0;
            while (length > 0 && index < count)
            {
                length -= (((((int)input[index++]) & 0xff00) + 0x1ffff) >> 16);
            }
            return input.Substring(0, index);
        }