string myString="a啊a啊"
myString=myString.Substring(0, 3)
我要得到的myString是  “a啊”怎么做?也就是 “啊”算2个长度

解决方案 »

  1.   

    c#与其它语言不同的是,string 类型每一个字符都是占两个字节的,所以myString=myString.Substring(0, 3)取到的是“a啊a”,在c#的string里,基本不用考虑中英字节问题。
      

  2.   

    楼主把编码转换成unicode再截取即可。
      

  3.   

    用Encoding转化为UTF-8,然后取得以后转化为gb2312
      

  4.   

    Encoding转化为UTF-8,截取后会截到半个中文字吗?
      

  5.   

    /// <summary>
    /// 获取字符串的总数(以英文字符为准,中文等字符按2英文字符计算)
    /// </summary>
    /// <param name="str">字符串</param>
    /// <returns>返回字符串的总数</returns>
    public int GetStringCount(string str) 
    {
    Regex regex = new Regex("[\u4e00-\u9fa5]+", RegexOptions.Compiled);
    char[] stringChar = str.ToCharArray();
    StringBuilder sb = new StringBuilder();
    int nLength = 0;
    for(int i = 0; i < stringChar.Length; i++) 
    {
    if (regex.IsMatch((stringChar[i]).ToString())) 
    {
    sb.Append(stringChar[i]);
    nLength += 2;
    }
    else 
    {
    sb.Append(stringChar[i]);
    nLength = nLength + 1;
    }
    }
    return nLength;
    }
      

  6.   

    默认就是unicode 
    直接myString.Substring(0, 2)
    不行?
      

  7.   

    dot Net使用的字符串String是Unicode编码的;它也是以Unicode编码的形式显示字
    符串。string[] btemp;btemp=System.Text.Encoding.UTF8.GetBytes(temp);
    string ttemp=System.Text.Encoding.GetEncoding("GB2312").GetString(btemp);
      

  8.   

    SubString直接截取即可如果你想实现,在一行中放置指定长度的串,那么可能汉字排头和英文排头时显示就不一样了比如显示的一行中可容纳20个字符  “fffffffffsdf地……” 这样是正常显示的但如果是“发射点法似的十分上十分是…………”,也还是可正常获得的,但要在两行中显示所以这时你要进行处理了。不是简单的SubString能完成的吧……