梦幻之旅

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 阅读(1209) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航: