public static string GetString(string str, int length)
{
int i = 0, j = 0;
foreach(char chr in str)
{
if((int)chr > 127)
{
i += 2;
}
else
{
i ++;
}
if (i > length)
{
str = str.Substring(0, j) + "...";
break;
}
j ++;
}
return str;
 
}
用这个

解决方案 »

  1.   

    这个是截取字符串的,汉字算2个字符,length是算长度的不是字节,把上面的改改就行
      

  2.   

    楼主是问什么?
    你是想登陆时中文和英文长度限制一样?
    还是中文算两个英文算一个?
    你贴出的代码是客户端代码(javascript),作用只是检查用户名字符的有效性。
    hui1202(骨灰) 的代码是服务端代码(C#)。
    楼主要在客户端检查还是在服务端检查?方法一:(客户端的javascript代码)//函数功能:检查字符串长度(英文算一个,中文算两个)
    //参数说明:s是待检查的字符串,n是限制字数
    //返回值:s的长度超过n就返回false,否则返回true
    function CheckLength(s,n)
    {
      for(var i=0; i<s.length; i++)
      {
        if(s.charCodeAt(i)>255)
          n-=2;
        else
          n--;
      }
      if(n<0)
        return false;
      else
        return true;
    }方法二:(服务端的C#代码)//函数功能:检查字符串长度(英文算一个,中文算两个)
    //参数说明:s是待检查的字符串,n是限制字数
    //返回值:s的长度超过n就返回false,否则返回true
    bool CheckLength(string s, int n)
    {
      for(int i=0; i<s.Length; i++)
      {
        if((int)s[i]>255)
          n-=2;
        else
          n--;
      }
      if(n<0)
        return false;
      else
        return true;
    }
      

  3.   

    在客户端调用:
    if(CheckLength(document.getElementById("user_name").value,6))
      alert("通过。");
    else
      alert("字符超过6个字了。");在服务端调用:
    if(CheckLength(Request.Form["user_name"],6))
      //通过。
    else
      //字符超过6个字了。
      

  4.   

    长度不是字节数
    长度是字符数 字符是4字节还是双字节看编码问题了
    不过以后都是 UNICODE和UTF8用的最广泛 这个问题不用太操心
    而且对于数据库来说 已经普遍采用字符数控制长度
    不是按照字节算了如果需要操作通信端口比如 COM口或者自己写通信协议才需要计算这个
      

  5.   

    在编程语言中,不管是中文(双字节)还是英文(单字节),长度都是一样按个数来计算。比如:“abc中国”长度为5个字。
    但是有些情况就需要按字节数来计算长度了,比如:在SQL Server里有一个字段:类型varchar(5)(这是单字节可变字符字型,双字节则是nvarchar),此字段可以存放5个英文或是2个半的中文,这种情况下就不能存放“abc中国”了,会报错,“abc中国”是7字节。
    所以,在这种情况下就可按字节数来检查长度是否超出了。
      

  6.   

    ^[\u4e00-\u9fa5]+$
    利用正则判断。