如何能测试出汉字与字符混在一起时的字串长度? C#2003 Bt1.Text.Trim().Length 得到的长度是汉字个数+字符个数。但我想得到的是, 汉字占两位 + 字符个数。所以如何得到该TEXTBOX控件中汉字算两位,字符算一位的字串总长度? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //下面的是按一定长度切割字符串 里面大代码可以满足你取长度的需求 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的,好像所有都是占两位?你用一个纯字符组成,和一个纯汉字组成的试一下就知道了 System.Text.Encoding.GetEncoding("GB2312").GetByteCount(str); ---------------------------------------------------------------这个函数问题可以用,解决了这个问题。 但是我想这样, TExtBox 有个MAXLENGTH长度属性,我想通过它来设置最大长度(汉字为两位,字符为一位) ? 我现在设置 的MAXLENGTH 的长度时汉字只计算一个字符长度。 <asp:TextBox onpropertychange="return func(this)" />function func(){ return 里面的内容就是改造下二楼的方法,本质是一样的} 有两种方法:一:转化为二进制数组然后计算长度。二:用正则表达式,根据Unicode编码的特点来求(这种方式可以用JS实现,需要发我邮件:[email protected]我给你发) string s = "abcdefg 某某某"; int size = System.Text.Encoding.GetEncoding("GB2312").GetByteCount(s);或int size = ((byte[])System.Text.Encoding.Default.GetBytes(s)).Length ; 效果不太好,会有闪烁的现象.. //用于存储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; } } 如何自定义VS.NET2008 C#项目的debug路径? 类似这样的XML通过什么方式建立最方便 朋友推荐两本书.一本C#的书. c#for遍历分组输出 在一个窗口中更改另外一个窗口的属性值 如何动态创建ole对象! 关于windows服务不能上传文件的问题(局域网内) c# 画两条相交直线的方法 tcp网络编程框架设计请教 取最后一个字符为什么这样不对(cc.Substring(cc.Length-1,cc.Length)),谢谢! 求解aspx网页中的image控件如何显示FTP服务器中的图片? 如何以编程的方式为Web(站点)项目(VS2005)添加引用
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;
}
System.Text.Encoding.GetEncoding("GB2312").GetByteCount(str);
---------------------------------------------------------------
这个函数问题可以用,解决了这个问题。 但是我想这样, TExtBox 有个MAXLENGTH长度属性,我想通过它来设置最大长度(汉字为两位,字符为一位) ? 我现在设置 的MAXLENGTH 的长度时汉字只计算一个字符长度。
{
return 里面的内容就是改造下二楼的方法,本质是一样的
}
一:转化为二进制数组然后计算长度。
二:用正则表达式,根据Unicode编码的特点来求(这种方式可以用JS实现,需要发我邮件:[email protected]我给你发)
int size = System.Text.Encoding.GetEncoding("GB2312").GetByteCount(s);
或
int size = ((byte[])System.Text.Encoding.Default.GetBytes(s)).Length ;
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;
}
}