C#2003  Bt1.Text.Trim().Length 得到的长度是汉字个数+字符个数。
但我想得到的是, 汉字占两位 + 字符个数。
所以如何得到该TEXTBOX控件中汉字算两位,字符算一位的字串总长度?

解决方案 »

  1.   

    //下面的是按一定长度切割字符串 里面大代码可以满足你取长度的需求 
    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;
            }
      

  2.   

    呵呵,不用那么复杂,按gb2312编码, 得到该编码的字节长度string str = "你好ABC";int size = System.Text.Encoding.GetEncoding("GB2312").GetBytesCount(str);
      

  3.   

    是GetByteCount 上面写错了 : )
      

  4.   

    System.Text.Encoding.GetEncoding("GB2312").GetByteCount(str);
      

  5.   

    .net是基于unicode的,好像所有都是占两位?你用一个纯字符组成,和一个纯汉字组成的试一下就知道了
      

  6.   


    System.Text.Encoding.GetEncoding("GB2312").GetByteCount(str);  
    ---------------------------------------------------------------
    这个函数问题可以用,解决了这个问题。  但是我想这样, TExtBox 有个MAXLENGTH长度属性,我想通过它来设置最大长度(汉字为两位,字符为一位)  ?  我现在设置 的MAXLENGTH 的长度时汉字只计算一个字符长度。
      

  7.   

    <asp:TextBox onpropertychange="return func(this)" />function func()
    {
     return 里面的内容就是改造下二楼的方法,本质是一样的
    }
      

  8.   

    有两种方法:
    一:转化为二进制数组然后计算长度。
    二:用正则表达式,根据Unicode编码的特点来求(这种方式可以用JS实现,需要发我邮件:[email protected]我给你发)
      

  9.   

    string s = "abcdefg 某某某";

    int size = System.Text.Encoding.GetEncoding("GB2312").GetByteCount(s);

    int size = ((byte[])System.Text.Encoding.Default.GetBytes(s)).Length ; 
      

  10.   

    效果不太好,会有闪烁的现象.. //用于存储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;
                }
            }