根据字符长度截取而非字节长度截取的方法

public static string GetChStringByLength(string s, int len)
        {
            byte[] data = Encoding.GetEncoding("GB18030").GetBytes(s);
            //算出需要截取的byte长度
            len *= 2;
            //如果长度小于等于指定长度则直接返回
            if (data.Length <= len)
            {
                return s;
            }

            //判断最后一个字节是否为汉字,如果是则截取掉最后一个byte
            int chByteLen = 0; //中文字节的长度
            for (int i = len - 1; i >= 0; i--)
            {
                if (data[i] >= 128)
                {
                    //记录中文字节长度
                    chByteLen++;
                }
                else
                {
                    break;
                }
            }

            //如果是奇数则截取掉最后一个byte
            if (chByteLen % 2 == 1)
            {
                len--;
            }

            byte[] newData = new byte[len];
            Array.Copy(data, newData, len);

            return Encoding.GetEncoding("GB18030").GetString(newData);
        }

猜你喜欢

转载自heavenslv.iteye.com/blog/966826