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);
}
Console.WriteLine(Intercept("ABC中國人", 7));
Console.WriteLine(Intercept("ABCD中國人", 7));
Console.WriteLine(Intercept("ABC中D國人", 7));
測試代碼的結果:
ABC中國
ABCD中國
ABC中D國