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

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

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

    Blogger Scott

    一個utf8轉換程序

    據說是一個通用的手機上使用的UTF8轉換程序,先記下來。

     1private final String readUnicodeFileUTF8(String filename) {
     2        StringBuffer sb = new StringBuffer(256);
     3        try {
     4            int[] surrogatePair = new int[2];
     5            InputStream is = this.getClass().getResourceAsStream(filename);
     6
     7            int val = 0;
     8            int unicharCount = 0;
     9            while ((val = readNextCharFromStreamUTF8(is))!=-1{
    10                unicharCount++;
    11                if (val <= 0xFFFF{
    12                    // if first value is the Byte Order Mark (BOM), do not add
    13                    if (! (unicharCount == 1 && val == 0xFEFF)) {
    14                        sb.append((char)val);
    15                    }

    16                }
     else {
    17                    supplementCodePointToSurrogatePair(val, surrogatePair);
    18                    sb.append((char)surrogatePair[0]);
    19                    sb.append((char)surrogatePair[1]);
    20                }

    21            }

    22            is.close();
    23        }
     catch (Exception e) {};
    24
    25        return new String(sb);
    26    }

    27   
    28    private final static int readNextCharFromStreamUTF8(InputStream is) {
    29        int c = -1;
    30        if (is==nullreturn c;
    31        boolean complete = false;
    32       
    33        try {
    34            int byteVal;
    35            int expecting=0;
    36            int composedVal=0;
    37           
    38            while (!complete && (byteVal = is.read()) != -1{
    39                if (expecting > 0 && (byteVal & 0xC0== 0x80{  /* 10xxxxxx */
    40                    expecting--;
    41                    composedVal = composedVal | ((byteVal & 0x3F<< (expecting*6));
    42                    if (expecting == 0{
    43                        c = composedVal;
    44                        complete = true;
    45                        //System.out.println("appending: U+" + Integer.toHexString(composedVal) );
    46                    }

    47                }
     else {
    48                    composedVal = 0;
    49                    expecting = 0;
    50                    if ((byteVal & 0x80== 0{    /* 0xxxxxxx */
    51                        // one byte character, no extending byte expected
    52                        c = byteVal;
    53                        complete = true;
    54                        //System.out.println("appending: U+" + Integer.toHexString(byteVal) );
    55                    }
     else if ((byteVal & 0xE0== 0xC0{  /* 110xxxxx */
    56                        expecting = 1;  // expecting 1 extending byte
    57                        composedVal = ((byteVal & 0x1F<< 6);
    58                    }
     else if ((byteVal & 0xF0== 0xE0{  /* 1110xxxx */
    59                        expecting = 2;  // expecting 2 extending bytes
    60                        composedVal = ((byteVal & 0x0F<< 12);
    61                    }
     else if ((byteVal & 0xF8== 0xF0{  /* 11110xxx */
    62                        expecting = 3;  // expecting 3 extending bytes
    63                        composedVal = ((byteVal & 0x07<< 18);
    64                    }
     else {
    65                        // non conformant utf-8, ignore or catch error
    66                    }

    67                }

    68            }

    69           
    70        }
     catch (Exception e) {
    71            System.out.println(e.toString());
    72        }

    73       
    74        return c;
    75    }

    76
    77    private final static void supplementCodePointToSurrogatePair(int codePoint, int[] surrogatePair) {
    78        int high4 = ((codePoint >> 16& 0x1F- 1;
    79        int mid6 = ((codePoint >> 10& 0x3F);
    80        int low10 = codePoint & 0x3FF;
    81
    82        surrogatePair[0= (0xD800 | (high4 << 6| (mid6));
    83        surrogatePair[1= (0xDC00 | (low10));
    84    }

    posted on 2009-06-07 16:37 江天部落格 閱讀(303) 評論(0)  編輯  收藏 所屬分類: AndroidJava

    主站蜘蛛池模板: 亚洲午夜激情视频| 午夜高清免费在线观看| 久久精品夜色噜噜亚洲A∨| 色噜噜噜噜亚洲第一| 成年女人毛片免费视频| 亚洲一区精品视频在线| 亚洲视频一区在线播放| 99精品热线在线观看免费视频| 亚洲AV一宅男色影视| 免费看少妇高潮成人片| 啦啦啦高清视频在线观看免费| 亚洲国产精品久久久久网站 | 亚洲另类古典武侠| 在线a免费观看最新网站| 亚洲美女自拍视频| 欧美a级在线现免费观看| 亚洲人成色77777在线观看| 免费v片视频在线观看视频| 欧洲美女大片免费播放器视频| 人妻无码久久一区二区三区免费| 亚洲国产综合91精品麻豆| 国产成人免费在线| 亚洲精品乱码久久久久久按摩| 亚洲性无码AV中文字幕| 永久免费av无码入口国语片| 亚洲国产婷婷六月丁香| 亚洲免费观看网站| 亚洲大码熟女在线观看| 成人无遮挡裸免费视频在线观看| 亚洲乱妇熟女爽到高潮的片| 亚洲国产一区视频| 中文字幕免费观看| 国产成人 亚洲欧洲| 亚洲AV午夜成人影院老师机影院 | 在线免费视频一区二区| 性生大片视频免费观看一级| 亚洲av片劲爆在线观看| 免费黄色网址入口| 亚洲最大的成人网| 国产亚洲美女精品久久久| 亚欧色视频在线观看免费|