<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    飛翔的起點

    從這里出發

    導航

    <2008年9月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011

    統計

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    怎么得到ucs2字符串中制定位數

     Web應用程序在瀏覽器中顯示字符串時,由于顯示長度的限制,常常需要將字符串截取后再進行顯示。但目前很多流行的語言,如C#Java內部采用的都是 Unicode 16(UCS2)編碼,在這種編碼中所有的字符都是兩個字符,因此,如果要截取的字符串是中、英文、數字混合的,就會產生問題,如下面的字符串:

    String s = "a加b等于c,如果a等1、b等于2,那么c等3";

        上面的字符串既有漢字,又有英文字符和數字。如果要截取前6個字節的字符,應該是”a加b等",但如果用substring方法截取前6個字符就成了"a 加b等于c"。產生這個問題的原因是將substring方法將雙字節的漢字當成一個字節的字符(UCS2字符)處理了。要解決這個問題的方法是首先得到該字符串的UCS2編碼的字節數組,如下面的代碼如下:

    byte[] bytes = s.getBytes("Unicode");

        由于上面生成的字節數組中前兩個字節是標志位,bytes[0] = -2,bytes[1] = -1,因此,要從第三個字節開始掃描,對于一個英文或數字字符,UCS2編碼的第二個字節是相應的ASCII,第一個字節是0,如a的UCS2編碼是0  97,而漢字兩個字節都不為0,因此,可以利于UCS2編碼的這個規則來計算實際的字節數,該方法的實現代碼如下:

        public static String bSubstring(String s, int length) throws Exception
        {

            
    byte[] bytes = s.getBytes("Unicode");
            
    int n = 0// 表示當前的字節數
            int i = 2// 要截取的字節數,從第3個字節開始
            for (; i < bytes.length && n < length; i++)
            {
                
    // 奇數位置,如3、5、7等,為UCS2編碼中兩個字節的第二個字節
                if (i % 2 == 1)
                {
                    n
    ++// 在UCS2第二個字節時n加1
                }
                
    else
                {
                    
    // 當UCS2編碼的第一個字節不等于0時,該UCS2字符為漢字,一個漢字算兩個字節
                    if (bytes[i] != 0)
                    {
                        n
    ++;
                    }
                }
            }
            
    // 如果i為奇數時,處理成偶數
            if (i % 2 == 1)

            {
                
    // 該UCS2字符是漢字時,去掉這個截一半的漢字
                if (bytes[i - 1] != 0)
                    i 
    = i - 1;
                
    // 該UCS2字符是字母或數字,則保留該字符
                else
                    i 
    = i + 1;
            }

            
    return new String(bytes, 0, i, "Unicode");
        }

        下面代碼使用了bSubstring方法:

    String s = "a加b等于c,如果a等1、b等于2,那么c等3";
    System.out.println(bSubstring(s,
    6));

        上面的代碼截取的字符串是"a加b等"

    posted on 2008-09-08 23:02 forgood 閱讀(320) 評論(0)  編輯  收藏 所屬分類: java

    主站蜘蛛池模板: 日韩在线播放全免费| 亚洲av日韩综合一区久热| 国产精品免费看久久久香蕉| 热99re久久免费视精品频软件| 99久久国产亚洲综合精品| 久草视频免费在线观看| 久久综合亚洲色一区二区三区| 88av免费观看| 午夜在线a亚洲v天堂网2019| 毛片A级毛片免费播放| 亚洲成a人片在线观看天堂无码| 国产特级淫片免费看| 色哟哟国产精品免费观看| 久久精品国产亚洲一区二区三区| 久久精品无码专区免费| 人人狠狠综合久久亚洲婷婷| 无码午夜成人1000部免费视频| 亚洲无限乱码一二三四区| 毛片免费视频播放| 国产在亚洲线视频观看| 亚洲一区二区三区香蕉| h视频在线观看免费网站| 亚洲国产高清国产拍精品| 亚洲一区二区三区在线视频| 免费观看男人吊女人视频| 亚洲午夜精品一区二区公牛电影院| 午夜a级成人免费毛片| 人体大胆做受免费视频| 亚洲精品天天影视综合网| 日韩毛片免费无码无毒视频观看| 日韩在线一区二区三区免费视频 | 在线观看国产情趣免费视频| 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 国产免费人成视频在线观看| 成人无码视频97免费| 亚洲春色另类小说| 国产成人在线免费观看| 午夜免费福利片观看| 亚洲av无码片vr一区二区三区| 亚洲国产成人精品无码区在线观看| 最近的中文字幕大全免费版|