<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 江天部落格 閱讀(297) 評論(0)  編輯  收藏 所屬分類: AndroidJava

    主站蜘蛛池模板: 亚洲日韩精品国产3区 | 蜜芽亚洲av无码精品色午夜| 日本三级2019在线观看免费| 国产无遮挡裸体免费视频| 2019亚洲午夜无码天堂| 国产亚洲视频在线观看网址| 成人性生免费视频| 久久久久亚洲精品天堂久久久久久 | 在线观看亚洲AV日韩A∨| 中文字幕人成无码免费视频| 亚洲综合精品伊人久久| 免费看美女被靠到爽| 高h视频在线免费观看| 美丽的姑娘免费观看在线播放| 免费夜色污私人影院在线观看| 亚洲国产精品国自产电影| 午夜视频免费在线观看| 亚洲成人免费电影| 国产免费AV片在线观看| 免费少妇a级毛片| 一级一级一级毛片免费毛片| 亚洲精品成人网站在线观看| 18禁男女爽爽爽午夜网站免费| 亚洲国产精品成人精品小说| 日本一道综合久久aⅴ免费| 亚洲六月丁香六月婷婷蜜芽 | 国产成人精品亚洲精品| 在线观看免费播放av片| 亚洲国产视频一区| 免费欧洲毛片A级视频无风险| 亚洲第一区二区快射影院| 3344免费播放观看视频| 亚洲永久网址在线观看| 中文字幕亚洲天堂| 黄+色+性+人免费| 全部在线播放免费毛片| 久久综合亚洲色HEZYO社区| 国产免费牲交视频| 少妇人妻偷人精品免费视频| 亚洲色偷偷偷综合网| 亚洲va中文字幕无码久久|