<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

    主站蜘蛛池模板: 最近中文字幕免费mv在线视频| 亚洲精品白色在线发布| 中文字幕无线码中文字幕免费| 亚洲国产成人高清在线观看 | 亚洲高清中文字幕免费| 中文字幕第13亚洲另类| 亚洲欧美黑人猛交群| 亚洲区日韩区无码区| 69视频在线是免费观看| 特级毛片A级毛片免费播放| 最近免费中文字幕大全视频 | 国产亚洲情侣一区二区无| 18pao国产成视频永久免费| 亚洲欧美国产日韩av野草社区| 亚洲精品色午夜无码专区日韩| 麻豆最新国产剧情AV原创免费| 四虎永久在线精品免费一区二区| 免费一级肉体全黄毛片| 国产AV无码专区亚洲AV麻豆丫| 亚洲色精品vr一区二区三区 | 亚洲精品国产精品乱码不99| 成年性羞羞视频免费观看无限| 东方aⅴ免费观看久久av | 亚洲爆乳精品无码一区二区| 久久国产精品亚洲综合| 免费无码又爽又刺激高潮视频| 亚洲人成电影在在线观看网色| 亚洲AV无码之日韩精品| 久久免费香蕉视频| 亚洲av无码日韩av无码网站冲| 亚洲精品视频免费在线观看| 亚洲精品无码激情AV| 毛片免费观看的视频在线| 久久福利青草精品资源站免费| 青娱乐在线免费观看视频| 亚洲国产成人精品电影| 亚洲免费视频网站| 久久99国产亚洲高清观看首页 | 亚洲短视频在线观看| 亚洲精品成人片在线观看精品字幕| 高清国语自产拍免费视频国产|