夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
          BufferedReader br = new BufferedReader(new UnicodeReader(in, Charset.defaultCharset().name())); 



          import java.io.*;

          public class UnicodeReader extends Reader {
            PushbackInputStream internalIn;
            InputStreamReader   internalIn2 
          = null;
            String              defaultEnc;

            
          private static final int BOM_SIZE = 4;

            
            UnicodeReader(InputStream in, String defaultEnc) 
          {
               internalIn 
          = new PushbackInputStream(in, BOM_SIZE);
               
          this.defaultEnc = defaultEnc;
            }


            
          public String getDefaultEncoding() {
               
          return defaultEnc;
            }


            
            
          public String getEncoding() {
               
          if (internalIn2 == nullreturn null;
               
          return internalIn2.getEncoding();
            }


            
            
          protected void init() throws IOException {
               
          if (internalIn2 != nullreturn;

               String encoding;
               
          byte bom[] = new byte[BOM_SIZE];
               
          int n, unread;
               n 
          = internalIn.read(bom, 0, bom.length);

               
          if ( (bom[0== (byte)0x00&& (bom[1== (byte)0x00&&
                           (bom[
          2== (byte)0xFE&& (bom[3== (byte)0xFF) ) {
                  encoding 
          = "UTF-32BE";
                  unread 
          = n - 4;
               }
           else if ( (bom[0== (byte)0xFF&& (bom[1== (byte)0xFE&&
                           (bom[
          2== (byte)0x00&& (bom[3== (byte)0x00) ) {
                  encoding 
          = "UTF-32LE";
                  unread 
          = n - 4;
               }
           else if (  (bom[0== (byte)0xEF&& (bom[1== (byte)0xBB&&
                     (bom[
          2== (byte)0xBF) ) {
                  encoding 
          = "UTF-8";
                  unread 
          = n - 3;
               }
           else if ( (bom[0== (byte)0xFE&& (bom[1== (byte)0xFF) ) {
                  encoding 
          = "UTF-16BE";
                  unread 
          = n - 2;
               }
           else if ( (bom[0== (byte)0xFF&& (bom[1== (byte)0xFE) ) {
                  encoding 
          = "UTF-16LE";
                  unread 
          = n - 2;
               }
           else {
                  
          // Unicode BOM mark not found, unread all bytes
                  encoding = defaultEnc;
                  unread 
          = n;
               }
              
               
          //System.out.println("read=" + n + ", unread=" + unread);

               
          if (unread > 0) internalIn.unread(bom, (n - unread), unread);

               
          // Use given encoding
               if (encoding == null{
                  internalIn2 
          = new InputStreamReader(internalIn);
               }
           else {
                  internalIn2 
          = new InputStreamReader(internalIn, encoding);
               }

            }


            
          public void close() throws IOException {
               init();
               internalIn2.close();
            }


            
          public int read(char[] cbuf, int off, int len) throws IOException {
               init();
               
          return internalIn2.read(cbuf, off, len);
            }


          }
          posted on 2012-04-20 15:28 HUIKK 閱讀(1214) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 怀柔区| 西青区| 巫山县| 定远县| 景谷| 襄城县| 京山县| 龙里县| 开阳县| 南部县| 兴业县| 凤凰县| 调兵山市| 广宁县| 南通市| 玉屏| 五指山市| 胶南市| 调兵山市| 余庆县| 云林县| 琼海市| 河西区| 大安市| 宣城市| 于田县| 含山县| 唐河县| 敦煌市| 湘西| 蛟河市| 瓦房店市| 团风县| 宁远县| 垫江县| 阳西县| 探索| 东乡县| 淄博市| 武山县| 博乐市|