日期:2014-05-20  浏览次数:20753 次

如何能测试出汉字与字符混在一起时的字串长度?
C#2003    

Bt1.Text.Trim().Length   得到的长度是汉字个数+字符个数。


但我想得到的是,   汉字占两位   +   字符个数。


所以如何得到该TEXTBOX控件中汉字算两位,字符算一位的字串总长度?

------解决方案--------------------
//下面的是按一定长度切割字符串 里面大代码可以满足你取长度的需求
public static string GetSubString(string str, int length)
{
string temp = str;
int j = 0;
int k = 0;
for (int i = 0; i < temp.Length; i++)
{
if (Regex.IsMatch(temp.Substring(i, 1), @ "[\u4e00-\u9fa5]+ "))
{
j += 2;
}
else
{
j += 1;
}
if (j <= length)
{
k += 1;
}
if (j > = length)
{
return temp.Substring(0, k);
}
}
return temp;
}
------解决方案--------------------
呵呵,不用那么复杂,按gb2312编码, 得到该编码的字节长度

string str = "你好ABC ";

int size = System.Text.Encoding.GetEncoding( "GB2312 ").GetBytesCount(str);
------解决方案--------------------
是GetByteCount 上面写错了 : )
------解决方案--------------------
System.Text.Encoding.GetEncoding( "GB2312 ").GetByteCount(str);
------解决方案--------------------
.net是基于unicode的,好像所有都是占两位?

你用一个纯字符组成,和一个纯汉字组成的试一下就知道了
------解决方案--------------------
效果不太好,会有闪烁的现象..

//用于存储TextBox中原值
private string oldText = " ";
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (Encoding.GetEncoding( "GB2312 ").GetByteCount(this.textBox1.Text) > this.textBox1.MaxLength )
{
this.textBox1.Text = oldText;
}
else
{
oldText = this.textBox1.Text;
}
}