截取字符串长度问题。
遇到一个问题,英文长度跟中文长度差了一半。效果很不好。怎么解决啊。
<%#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("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++)