commons-file/src/main/java/info/monitorenter/cpdetector/io/UnicodeDetector.java
public Charset detectCodepage(InputStream in, int length) throws IOException {
        byte[] bom = new byte[4]; // Get the byte-order mark, if there is one
        in.read(bom, 0, 4);
        // Unicode formats => read BOM
        byte b = (byte)0xEF;
        if (bom[0] == (byte)0x00 && bom[1] == (byte)0x00 && bom[2] == (byte)0xFE
                && bom[2] == (byte)0xFF) // utf-32BE
            return Charset.forName("UTF-32BE");
        if (bom[0] == (byte)0xFF && bom[1] == (byte)0xFE && bom[2] == (byte)0x00
                && bom[2] == (byte)0x00) // utf-32BE
            return Charset.forName("UTF-32LE");
        if (bom[0] == (byte)0xEF && bom[1] == (byte)0xBB && bom[2] == (byte)0xBF) // utf-8
            return Charset.forName("UTF-8");
        if (bom[0] == (byte)0xff && bom[1] == (byte)0xfe) // ucs-2le, ucs-4le, and ucs-16le
            return Charset.forName("UTF-16LE");
        if (bom[0] == (byte)0xfe && bom[1] == (byte)0xff) // utf-16 and ucs-2
            return Charset.forName("UTF-16BE");
        if (bom[0] == (byte)0 && bom[1] == (byte)0 && bom[2] == (byte)0xfe && bom[3] == (byte)0xff) // ucs-4
            return Charset.forName("UCS-4");
        return UnknownCharset.getInstance();
    }
public Charset detectCodepage(InputStream in, int length) throws IOException {
        byte[] bom = new byte[4]; // Get the byte-order mark, if there is one
        in.read(bom, 0, 4);
        // Unicode formats => read BOM
        byte b = (byte)0xEF;
        if (bom[0] == (byte)0x00 && bom[1] == (byte)0x00 && bom[2] == (byte)0xFE
                && bom[2] == (byte)0xFF) // utf-32BE
            return Charset.forName("UTF-32BE");
        if (bom[0] == (byte)0xFF && bom[1] == (byte)0xFE && bom[2] == (byte)0x00
                && bom[2] == (byte)0x00) // utf-32BE
            return Charset.forName("UTF-32LE");
        if (bom[0] == (byte)0xEF && bom[1] == (byte)0xBB && bom[2] == (byte)0xBF) // utf-8
            return Charset.forName("UTF-8");
        if (bom[0] == (byte)0xff && bom[1] == (byte)0xfe) // ucs-2le, ucs-4le, and ucs-16le
            return Charset.forName("UTF-16LE");
        if (bom[0] == (byte)0xfe && bom[1] == (byte)0xff) // utf-16 and ucs-2
            return Charset.forName("UTF-16BE");
        if (bom[0] == (byte)0 && bom[1] == (byte)0 && bom[2] == (byte)0xfe && bom[3] == (byte)0xff) // ucs-4
            return Charset.forName("UCS-4");
        return UnknownCharset.getInstance();
    }
public Charset detectCodepage ( InputStream in , int length ) throws IOException { byte [ ] bom = new byte [ 4 ] ; // Get the byte-order mark, if there is one in . read ( bom , 0 , 4 ) ; // Unicode formats => read BOM byte b = ( byte ) 0xEF ; if ( bom [ 0 ] == ( byte ) 0x00 && bom [ 1 ] == ( byte ) 0x00 && bom [ 2 ] == ( byte ) 0xFE && bom [ 2 ] == ( byte ) 0xFF ) // utf-32BE return Charset . forName ( "UTF-32BE" ) ; if ( bom [ 0 ] == ( byte ) 0xFF && bom [ 1 ] == ( byte ) 0xFE && bom [ 2 ] == ( byte ) 0x00 && bom [ 2 ] == ( byte ) 0x00 ) // utf-32BE return Charset . forName ( "UTF-32LE" ) ; if ( bom [ 0 ] == ( byte ) 0xEF && bom [ 1 ] == ( byte ) 0xBB && bom [ 2 ] == ( byte ) 0xBF ) // utf-8 return Charset . forName ( "UTF-8" ) ; if ( bom [ 0 ] == ( byte ) 0xff && bom [ 1 ] == ( byte ) 0xfe ) // ucs-2le, ucs-4le, and ucs-16le return Charset . forName ( "UTF-16LE" ) ; if ( bom [ 0 ] == ( byte ) 0xfe && bom [ 1 ] == ( byte ) 0xff ) // utf-16 and ucs-2 return Charset . forName ( "UTF-16BE" ) ; if ( bom [ 0 ] == ( byte ) 0 && bom [ 1 ] == ( byte ) 0 && bom [ 2 ] == ( byte ) 0xfe && bom [ 3 ] == ( byte ) 0xff ) // ucs-4 return Charset . forName ( "UCS-4" ) ; return UnknownCharset . getInstance ( ) ; }
/*
(non-Javadoc) It is assumed that the inputstream is at the start of the file or String (in order to read the
BOM).

@see cpdetector.io.ICodepageDetector#detectCodepage(java.io.InputStream, int)
/ * ( non - Javadoc ) It is assumed that the inputstream is at the start of the file or String ( in order to read the BOM ) .