String.SubString(int index,int length)
index:开始位置,从0开始
length:你要取的子字符串的长度
Substring 按字符数截取字符串,中文、英文、数字各算一个字符,结果长短不一。
中文字符和英文字符的宽度不同,因为他们的字节数不同:中文占两个字节,英文、数字各占一个字节,如果字符串中包含上述三种类型字符,可以使用下列方法截取“定长”的字符串:
aspx
<asp:Repeater ID="Repeater_article_leatest" runat="server" DataSourceID="SqlDataSource_article_leatest">
<ItemTemplate>
<div style="line-height: 20px">
<a href=''article/item.aspx?guid=<%# Eval("guid") %>'' target="_blank">
<asp:Label runat="server" Text=''<%# this.getSubString((Eval("title")).ToString()) %>'' ToolTip=''<%# Eval("title") %>'' />
</a>
</div>
</ItemTemplate>
</asp:Repeater>
aspx.cs
public static class StringExt
{
public static String bSubstring(string s)
{
byte[] bytes = System.Text.Encoding.Unicode.GetBytes(s);
int n = 0; // 表示当前的字节数
int i = 0;
int len=0; // 表示要截取的字节数,必须为偶数
for (; i < bytes.GetLength(0) && n < len; i++)
{
// 偶数位置,如0、2、4等,为UCS2编码中两个字节的第一个字节
if (i % 2 == 0)
{
n++; // 在UCS2第一个字节时n加1
}
else
{
// 当UCS2编码的第二个字节大于0时,该UCS2字符为汉字,一个汉字算两个字节
if (bytes[i] > 0)
{
n++;
}
}
}
// 如果i为奇数时,处理成偶数
if (i % 2 == 1)
{
// 该UCS2字符是汉字时,去掉这个截一半的汉字
if (bytes[i] > 0)
i = i - 1;
// 该UCS2字符是字母或数字,则保留该字符
else
i = i + 1;
}
return System.Text.Encoding.Unicode.GetString(bytes, 0, i);
}
} |