日期:2014-05-17  浏览次数:20424 次

截取字符串长度问题。
遇到一个问题,英文长度跟中文长度差了一半。效果很不好。怎么解决啊。


<%#function.GetLeft(Eval("typename").ToString(), 12)%>

   public static string GetLeft(string content, int count)
        {
            if (content.Length > count)
            {
                content = content.Substring(0, count);
            }
            else
            {
                content = content.ToString();
            }
            return content;
        }

------解决方案--------------------
引用:
public static string GetLeft(string content, int count)
        {
return Regex.Match("dds字符串", @"^([\u4e00-\u9fa5]
------解决方案--------------------
\S{1,2}){1,"+count+"}").Value;
        }

改成这样更准确一点(包含中文标点):
public static string GetLeft(string content, int count)
        {
return Regex.Match("sdd字符3adfsd", @"^([\u4e00-\u9fa5
------解决方案--------------------

------解决方案--------------------

------解决方案--------------------

------解决方案--------------------

------解决方案--------------------

------解决方案--------------------
,!
------解决方案--------------------
?]
------解决方案--------------------
\S{1,2}){1,"+count+"}").Value;
        }
不过测试发现,如果前面的单字节字符个数是奇数的话,最终的结果就是多了一个单字节字符,比如上面的结果如果count是4的话,返回的就是“sdd字符3a”,这也似乎没好的办法。
------解决方案--------------------
 public static string GetLeft(string str, int length)
    {
        if (str == null)

            return string.Empty;



        int len = length * 2;

        int j = 0, k = 0;

        Encoding encoding = Encoding.GetEncoding("gb2312");



        for (int i = 0; i < str.Length; i++)