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);
}