//字符是否为汉字 public bool IsChinese(char c) { return (int)c >= 0x4E00 && (int)c <= 0x9FA5; } //获得字节长度 private int getLengthb(string str) { return System.Text.Encoding.Default.GetByteCount(str); } //c#的中英文混合字符串截取指定长度,startidx从0开始 by gisoracle@126.com public string getStrLenB(string str, int startidx, int len) { int Lengthb = getLengthb(str); if (startidx + 1 > Lengthb) { return ""; } int j = 0; int l = 0; int strw = 0;//字符的宽度 bool b = false; string rstr = ""; for (int i = 0; i < str.Length; i++) { char c = str[i]; if (j >= startidx) { rstr = rstr + c; b = true; } if (IsChinese(c)) { strw = 2; } else { strw = 1; } j = j + strw; if (b) { l = l + strw; if ((l+1)>= len) break; } } return rstr; } private void button4_Click(object sender, EventArgs e) //测试by yl gisoracle@126.com { MessageBox.Show(getStrLenB("gisoracle欢迎你gisoracle", 0, 10));//gisoracle MessageBox.Show(getStrLenB("gisoracle欢迎你gisoracle", 1, 10));//isoracle欢 MessageBox.Show(getStrLenB("gisoracle欢迎你gisoracle", 2, 10));//isoracle欢 }