快速业务通道

按字节数截取定长字符串(中文占两个字节,英文/数字占一个字节)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-04-11

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);
    }
}

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号