<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

    主站蜘蛛池模板: 亚洲国产激情一区二区三区| 在线a毛片免费视频观看| 亚洲人成网站色在线入口| 亚洲欧美日韩中文二区 | 美女视频黄a视频全免费网站色| 免费观看的毛片大全| va天堂va亚洲va影视中文字幕| 99热这里只有精品免费播放| 久久久久亚洲精品影视| 日韩精品无码一区二区三区免费| 亚洲一区二区影院| 青娱分类视频精品免费2| 四虎亚洲精品高清在线观看| 韩国二级毛片免费播放| 特黄特色大片免费| 亚洲中文字幕无码一区| 久久99精品国产免费观看| 亚洲成人黄色在线观看| 在线观看免费成人| 日韩在线观看免费| 亚洲AV无码专区国产乱码电影| 麻花传媒剧在线mv免费观看| 亚洲AV色吊丝无码| 免费国产人做人视频在线观看| 国产免费伦精品一区二区三区| 无码专区—VA亚洲V天堂| 成人毛片免费在线观看| 一级做a爰片久久毛片免费陪 | 欧洲亚洲综合一区二区三区| 国产成人精品久久亚洲高清不卡 | 中文字幕免费在线看线人动作大片 | 国产亚洲精品成人a v小说| 女人体1963午夜免费视频| 国产成人亚洲精品| 亚洲国产综合精品一区在线播放| 成人无码a级毛片免费| 色婷五月综激情亚洲综合| 亚洲一级特黄大片无码毛片| 日韩精品久久久久久免费| 亚洲精品乱码久久久久蜜桃| 不卡一卡二卡三亚洲|