如何能测试出汉字与字符混在一起时的字串长度?
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;
}
}