Java源码示例:com.sun.org.apache.xerces.internal.impl.io.UCSReader

示例1
/**
 * Sets the encoding of the scanner. This method is used by the
 * scanners if the XMLDecl or TextDecl line contains an encoding
 * pseudo-attribute.
 * <p>
 * <strong>Note:</strong> The underlying character reader on the
 * current entity will be changed to accomodate the new encoding.
 * However, the new encoding is ignored if the current reader was
 * not constructed from an input stream (e.g. an external entity
 * that is resolved directly to the appropriate java.io.Reader
 * object).
 *
 * @param encoding The IANA encoding name of the new encoding.
 *
 * @throws IOException Thrown if the new encoding is not supported.
 *
 * @see com.sun.org.apache.xerces.internal.util.EncodingMap
 */
public final void setEncoding(String encoding) throws IOException {

    if (DEBUG_ENCODINGS) {
        System.out.println("$$$ setEncoding: "+encoding);
    }

    if (fCurrentEntity.stream != null) {
        // if the encoding is the same, don't change the reader and
        // re-use the original reader used by the OneCharReader
        // NOTE: Besides saving an object, this overcomes deficiencies
        //       in the UTF-16 reader supplied with the standard Java
        //       distribution (up to and including 1.3). The UTF-16
        //       decoder buffers 8K blocks even when only asked to read
        //       a single char! -Ac
        if (fCurrentEntity.encoding == null ||
                !fCurrentEntity.encoding.equals(encoding)) {
            // UTF-16 is a bit of a special case.  If the encoding is UTF-16,
            // and we know the endian-ness, we shouldn't change readers.
            // If it's ISO-10646-UCS-(2|4), then we'll have to deduce
            // the endian-ness from the encoding we presently have.
            if(fCurrentEntity.encoding != null && fCurrentEntity.encoding.startsWith("UTF-16")) {
                String ENCODING = encoding.toUpperCase(Locale.ENGLISH);
                if(ENCODING.equals("UTF-16")) return;
                if(ENCODING.equals("ISO-10646-UCS-4")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4LE);
                    }
                    return;
                }
                if(ENCODING.equals("ISO-10646-UCS-2")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2LE);
                    }
                    return;
                }
            }
            // wrap a new reader around the input stream, changing
            // the encoding
            if (DEBUG_ENCODINGS) {
                System.out.println("$$$ creating new reader from stream: "+
                        fCurrentEntity.stream);
            }
            //fCurrentEntity.stream.reset();
            fCurrentEntity.reader = createReader(fCurrentEntity.stream, encoding, null);
            fCurrentEntity.encoding = encoding;

        } else {
            if (DEBUG_ENCODINGS)
                System.out.println("$$$ reusing old reader on stream");
        }
    }

}
 
示例2
/**
 * Sets the encoding of the scanner. This method is used by the
 * scanners if the XMLDecl or TextDecl line contains an encoding
 * pseudo-attribute.
 * <p>
 * <strong>Note:</strong> The underlying character reader on the
 * current entity will be changed to accomodate the new encoding.
 * However, the new encoding is ignored if the current reader was
 * not constructed from an input stream (e.g. an external entity
 * that is resolved directly to the appropriate java.io.Reader
 * object).
 *
 * @param encoding The IANA encoding name of the new encoding.
 *
 * @throws IOException Thrown if the new encoding is not supported.
 *
 * @see com.sun.org.apache.xerces.internal.util.EncodingMap
 */
public final void setEncoding(String encoding) throws IOException {

    if (DEBUG_ENCODINGS) {
        System.out.println("$$$ setEncoding: "+encoding);
    }

    if (fCurrentEntity.stream != null) {
        // if the encoding is the same, don't change the reader and
        // re-use the original reader used by the OneCharReader
        // NOTE: Besides saving an object, this overcomes deficiencies
        //       in the UTF-16 reader supplied with the standard Java
        //       distribution (up to and including 1.3). The UTF-16
        //       decoder buffers 8K blocks even when only asked to read
        //       a single char! -Ac
        if (fCurrentEntity.encoding == null ||
                !fCurrentEntity.encoding.equals(encoding)) {
            // UTF-16 is a bit of a special case.  If the encoding is UTF-16,
            // and we know the endian-ness, we shouldn't change readers.
            // If it's ISO-10646-UCS-(2|4), then we'll have to deduce
            // the endian-ness from the encoding we presently have.
            if(fCurrentEntity.encoding != null && fCurrentEntity.encoding.startsWith("UTF-16")) {
                String ENCODING = encoding.toUpperCase(Locale.ENGLISH);
                if(ENCODING.equals("UTF-16")) return;
                if(ENCODING.equals("ISO-10646-UCS-4")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4LE);
                    }
                    return;
                }
                if(ENCODING.equals("ISO-10646-UCS-2")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2LE);
                    }
                    return;
                }
            }
            // wrap a new reader around the input stream, changing
            // the encoding
            if (DEBUG_ENCODINGS) {
                System.out.println("$$$ creating new reader from stream: "+
                        fCurrentEntity.stream);
            }
            //fCurrentEntity.stream.reset();
            fCurrentEntity.reader = createReader(fCurrentEntity.stream, encoding, null);
            fCurrentEntity.encoding = encoding;

        } else {
            if (DEBUG_ENCODINGS)
                System.out.println("$$$ reusing old reader on stream");
        }
    }

}
 
示例3
/**
 * Sets the encoding of the scanner. This method is used by the
 * scanners if the XMLDecl or TextDecl line contains an encoding
 * pseudo-attribute.
 * <p>
 * <strong>Note:</strong> The underlying character reader on the
 * current entity will be changed to accomodate the new encoding.
 * However, the new encoding is ignored if the current reader was
 * not constructed from an input stream (e.g. an external entity
 * that is resolved directly to the appropriate java.io.Reader
 * object).
 *
 * @param encoding The IANA encoding name of the new encoding.
 *
 * @throws IOException Thrown if the new encoding is not supported.
 *
 * @see com.sun.org.apache.xerces.internal.util.EncodingMap
 */
public final void setEncoding(String encoding) throws IOException {

    if (DEBUG_ENCODINGS) {
        System.out.println("$$$ setEncoding: "+encoding);
    }

    if (fCurrentEntity.stream != null) {
        // if the encoding is the same, don't change the reader and
        // re-use the original reader used by the OneCharReader
        // NOTE: Besides saving an object, this overcomes deficiencies
        //       in the UTF-16 reader supplied with the standard Java
        //       distribution (up to and including 1.3). The UTF-16
        //       decoder buffers 8K blocks even when only asked to read
        //       a single char! -Ac
        if (fCurrentEntity.encoding == null ||
                !fCurrentEntity.encoding.equals(encoding)) {
            // UTF-16 is a bit of a special case.  If the encoding is UTF-16,
            // and we know the endian-ness, we shouldn't change readers.
            // If it's ISO-10646-UCS-(2|4), then we'll have to deduce
            // the endian-ness from the encoding we presently have.
            if(fCurrentEntity.encoding != null && fCurrentEntity.encoding.startsWith("UTF-16")) {
                String ENCODING = encoding.toUpperCase(Locale.ENGLISH);
                if(ENCODING.equals("UTF-16")) return;
                if(ENCODING.equals("ISO-10646-UCS-4")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4LE);
                    }
                    return;
                }
                if(ENCODING.equals("ISO-10646-UCS-2")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2LE);
                    }
                    return;
                }
            }
            // wrap a new reader around the input stream, changing
            // the encoding
            if (DEBUG_ENCODINGS) {
                System.out.println("$$$ creating new reader from stream: "+
                        fCurrentEntity.stream);
            }
            //fCurrentEntity.stream.reset();
            fCurrentEntity.reader = createReader(fCurrentEntity.stream, encoding, null);
            fCurrentEntity.encoding = encoding;

        } else {
            if (DEBUG_ENCODINGS)
                System.out.println("$$$ reusing old reader on stream");
        }
    }

}
 
示例4
/**
 * Sets the encoding of the scanner. This method is used by the
 * scanners if the XMLDecl or TextDecl line contains an encoding
 * pseudo-attribute.
 * <p>
 * <strong>Note:</strong> The underlying character reader on the
 * current entity will be changed to accomodate the new encoding.
 * However, the new encoding is ignored if the current reader was
 * not constructed from an input stream (e.g. an external entity
 * that is resolved directly to the appropriate java.io.Reader
 * object).
 *
 * @param encoding The IANA encoding name of the new encoding.
 *
 * @throws IOException Thrown if the new encoding is not supported.
 *
 * @see com.sun.org.apache.xerces.internal.util.EncodingMap
 */
public final void setEncoding(String encoding) throws IOException {

    if (DEBUG_ENCODINGS) {
        System.out.println("$$$ setEncoding: "+encoding);
    }

    if (fCurrentEntity.stream != null) {
        // if the encoding is the same, don't change the reader and
        // re-use the original reader used by the OneCharReader
        // NOTE: Besides saving an object, this overcomes deficiencies
        //       in the UTF-16 reader supplied with the standard Java
        //       distribution (up to and including 1.3). The UTF-16
        //       decoder buffers 8K blocks even when only asked to read
        //       a single char! -Ac
        if (fCurrentEntity.encoding == null ||
                !fCurrentEntity.encoding.equals(encoding)) {
            // UTF-16 is a bit of a special case.  If the encoding is UTF-16,
            // and we know the endian-ness, we shouldn't change readers.
            // If it's ISO-10646-UCS-(2|4), then we'll have to deduce
            // the endian-ness from the encoding we presently have.
            if(fCurrentEntity.encoding != null && fCurrentEntity.encoding.startsWith("UTF-16")) {
                String ENCODING = encoding.toUpperCase(Locale.ENGLISH);
                if(ENCODING.equals("UTF-16")) return;
                if(ENCODING.equals("ISO-10646-UCS-4")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4LE);
                    }
                    return;
                }
                if(ENCODING.equals("ISO-10646-UCS-2")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2LE);
                    }
                    return;
                }
            }
            // wrap a new reader around the input stream, changing
            // the encoding
            if (DEBUG_ENCODINGS) {
                System.out.println("$$$ creating new reader from stream: "+
                        fCurrentEntity.stream);
            }
            //fCurrentEntity.stream.reset();
            fCurrentEntity.reader = createReader(fCurrentEntity.stream, encoding, null);
            fCurrentEntity.encoding = encoding;

        } else {
            if (DEBUG_ENCODINGS)
                System.out.println("$$$ reusing old reader on stream");
        }
    }

}
 
示例5
/**
 * Sets the encoding of the scanner. This method is used by the
 * scanners if the XMLDecl or TextDecl line contains an encoding
 * pseudo-attribute.
 * <p>
 * <strong>Note:</strong> The underlying character reader on the
 * current entity will be changed to accomodate the new encoding.
 * However, the new encoding is ignored if the current reader was
 * not constructed from an input stream (e.g. an external entity
 * that is resolved directly to the appropriate java.io.Reader
 * object).
 *
 * @param encoding The IANA encoding name of the new encoding.
 *
 * @throws IOException Thrown if the new encoding is not supported.
 *
 * @see com.sun.org.apache.xerces.internal.util.EncodingMap
 */
public final void setEncoding(String encoding) throws IOException {

    if (DEBUG_ENCODINGS) {
        System.out.println("$$$ setEncoding: "+encoding);
    }

    if (fCurrentEntity.stream != null) {
        // if the encoding is the same, don't change the reader and
        // re-use the original reader used by the OneCharReader
        // NOTE: Besides saving an object, this overcomes deficiencies
        //       in the UTF-16 reader supplied with the standard Java
        //       distribution (up to and including 1.3). The UTF-16
        //       decoder buffers 8K blocks even when only asked to read
        //       a single char! -Ac
        if (fCurrentEntity.encoding == null ||
                !fCurrentEntity.encoding.equals(encoding)) {
            // UTF-16 is a bit of a special case.  If the encoding is UTF-16,
            // and we know the endian-ness, we shouldn't change readers.
            // If it's ISO-10646-UCS-(2|4), then we'll have to deduce
            // the endian-ness from the encoding we presently have.
            if(fCurrentEntity.encoding != null && fCurrentEntity.encoding.startsWith("UTF-16")) {
                String ENCODING = encoding.toUpperCase(Locale.ENGLISH);
                if(ENCODING.equals("UTF-16")) return;
                if(ENCODING.equals("ISO-10646-UCS-4")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4LE);
                    }
                    return;
                }
                if(ENCODING.equals("ISO-10646-UCS-2")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2LE);
                    }
                    return;
                }
            }
            // wrap a new reader around the input stream, changing
            // the encoding
            if (DEBUG_ENCODINGS) {
                System.out.println("$$$ creating new reader from stream: "+
                        fCurrentEntity.stream);
            }
            //fCurrentEntity.stream.reset();
            fCurrentEntity.reader = createReader(fCurrentEntity.stream, encoding, null);
            fCurrentEntity.encoding = encoding;

        } else {
            if (DEBUG_ENCODINGS)
                System.out.println("$$$ reusing old reader on stream");
        }
    }

}
 
示例6
/**
 * Sets the encoding of the scanner. This method is used by the
 * scanners if the XMLDecl or TextDecl line contains an encoding
 * pseudo-attribute.
 * <p>
 * <strong>Note:</strong> The underlying character reader on the
 * current entity will be changed to accomodate the new encoding.
 * However, the new encoding is ignored if the current reader was
 * not constructed from an input stream (e.g. an external entity
 * that is resolved directly to the appropriate java.io.Reader
 * object).
 *
 * @param encoding The IANA encoding name of the new encoding.
 *
 * @throws IOException Thrown if the new encoding is not supported.
 *
 * @see com.sun.org.apache.xerces.internal.util.EncodingMap
 */
public final void setEncoding(String encoding) throws IOException {

    if (DEBUG_ENCODINGS) {
        System.out.println("$$$ setEncoding: "+encoding);
    }

    if (fCurrentEntity.stream != null) {
        // if the encoding is the same, don't change the reader and
        // re-use the original reader used by the OneCharReader
        // NOTE: Besides saving an object, this overcomes deficiencies
        //       in the UTF-16 reader supplied with the standard Java
        //       distribution (up to and including 1.3). The UTF-16
        //       decoder buffers 8K blocks even when only asked to read
        //       a single char! -Ac
        if (fCurrentEntity.encoding == null ||
                !fCurrentEntity.encoding.equals(encoding)) {
            // UTF-16 is a bit of a special case.  If the encoding is UTF-16,
            // and we know the endian-ness, we shouldn't change readers.
            // If it's ISO-10646-UCS-(2|4), then we'll have to deduce
            // the endian-ness from the encoding we presently have.
            if(fCurrentEntity.encoding != null && fCurrentEntity.encoding.startsWith("UTF-16")) {
                String ENCODING = encoding.toUpperCase(Locale.ENGLISH);
                if(ENCODING.equals("UTF-16")) return;
                if(ENCODING.equals("ISO-10646-UCS-4")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4LE);
                    }
                    return;
                }
                if(ENCODING.equals("ISO-10646-UCS-2")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2LE);
                    }
                    return;
                }
            }
            // wrap a new reader around the input stream, changing
            // the encoding
            if (DEBUG_ENCODINGS) {
                System.out.println("$$$ creating new reader from stream: "+
                        fCurrentEntity.stream);
            }
            //fCurrentEntity.stream.reset();
            fCurrentEntity.reader = createReader(fCurrentEntity.stream, encoding, null);
            fCurrentEntity.encoding = encoding;

        } else {
            if (DEBUG_ENCODINGS)
                System.out.println("$$$ reusing old reader on stream");
        }
    }

}
 
示例7
/**
 * Sets the encoding of the scanner. This method is used by the
 * scanners if the XMLDecl or TextDecl line contains an encoding
 * pseudo-attribute.
 * <p>
 * <strong>Note:</strong> The underlying character reader on the
 * current entity will be changed to accomodate the new encoding.
 * However, the new encoding is ignored if the current reader was
 * not constructed from an input stream (e.g. an external entity
 * that is resolved directly to the appropriate java.io.Reader
 * object).
 *
 * @param encoding The IANA encoding name of the new encoding.
 *
 * @throws IOException Thrown if the new encoding is not supported.
 *
 * @see com.sun.org.apache.xerces.internal.util.EncodingMap
 */
public final void setEncoding(String encoding) throws IOException {

    if (DEBUG_ENCODINGS) {
        System.out.println("$$$ setEncoding: "+encoding);
    }

    if (fCurrentEntity.stream != null) {
        // if the encoding is the same, don't change the reader and
        // re-use the original reader used by the OneCharReader
        // NOTE: Besides saving an object, this overcomes deficiencies
        //       in the UTF-16 reader supplied with the standard Java
        //       distribution (up to and including 1.3). The UTF-16
        //       decoder buffers 8K blocks even when only asked to read
        //       a single char! -Ac
        if (fCurrentEntity.encoding == null ||
                !fCurrentEntity.encoding.equals(encoding)) {
            // UTF-16 is a bit of a special case.  If the encoding is UTF-16,
            // and we know the endian-ness, we shouldn't change readers.
            // If it's ISO-10646-UCS-(2|4), then we'll have to deduce
            // the endian-ness from the encoding we presently have.
            if(fCurrentEntity.encoding != null && fCurrentEntity.encoding.startsWith("UTF-16")) {
                String ENCODING = encoding.toUpperCase(Locale.ENGLISH);
                if(ENCODING.equals("UTF-16")) return;
                if(ENCODING.equals("ISO-10646-UCS-4")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4LE);
                    }
                    return;
                }
                if(ENCODING.equals("ISO-10646-UCS-2")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2LE);
                    }
                    return;
                }
            }
            // wrap a new reader around the input stream, changing
            // the encoding
            if (DEBUG_ENCODINGS) {
                System.out.println("$$$ creating new reader from stream: "+
                        fCurrentEntity.stream);
            }
            //fCurrentEntity.stream.reset();
            fCurrentEntity.reader = createReader(fCurrentEntity.stream, encoding, null);
            fCurrentEntity.encoding = encoding;

        } else {
            if (DEBUG_ENCODINGS)
                System.out.println("$$$ reusing old reader on stream");
        }
    }

}
 
示例8
/**
 * Sets the encoding of the scanner. This method is used by the
 * scanners if the XMLDecl or TextDecl line contains an encoding
 * pseudo-attribute.
 * <p>
 * <strong>Note:</strong> The underlying character reader on the
 * current entity will be changed to accomodate the new encoding.
 * However, the new encoding is ignored if the current reader was
 * not constructed from an input stream (e.g. an external entity
 * that is resolved directly to the appropriate java.io.Reader
 * object).
 *
 * @param encoding The IANA encoding name of the new encoding.
 *
 * @throws IOException Thrown if the new encoding is not supported.
 *
 * @see com.sun.org.apache.xerces.internal.util.EncodingMap
 */
public final void setEncoding(String encoding) throws IOException {

    if (DEBUG_ENCODINGS) {
        System.out.println("$$$ setEncoding: "+encoding);
    }

    if (fCurrentEntity.stream != null) {
        // if the encoding is the same, don't change the reader and
        // re-use the original reader used by the OneCharReader
        // NOTE: Besides saving an object, this overcomes deficiencies
        //       in the UTF-16 reader supplied with the standard Java
        //       distribution (up to and including 1.3). The UTF-16
        //       decoder buffers 8K blocks even when only asked to read
        //       a single char! -Ac
        if (fCurrentEntity.encoding == null ||
                !fCurrentEntity.encoding.equals(encoding)) {
            // UTF-16 is a bit of a special case.  If the encoding is UTF-16,
            // and we know the endian-ness, we shouldn't change readers.
            // If it's ISO-10646-UCS-(2|4), then we'll have to deduce
            // the endian-ness from the encoding we presently have.
            if(fCurrentEntity.encoding != null && fCurrentEntity.encoding.startsWith("UTF-16")) {
                String ENCODING = encoding.toUpperCase(Locale.ENGLISH);
                if(ENCODING.equals("UTF-16")) return;
                if(ENCODING.equals("ISO-10646-UCS-4")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4LE);
                    }
                    return;
                }
                if(ENCODING.equals("ISO-10646-UCS-2")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2LE);
                    }
                    return;
                }
            }
            // wrap a new reader around the input stream, changing
            // the encoding
            if (DEBUG_ENCODINGS) {
                System.out.println("$$$ creating new reader from stream: "+
                        fCurrentEntity.stream);
            }
            //fCurrentEntity.stream.reset();
            fCurrentEntity.reader = createReader(fCurrentEntity.stream, encoding, null);
            fCurrentEntity.encoding = encoding;

        } else {
            if (DEBUG_ENCODINGS)
                System.out.println("$$$ reusing old reader on stream");
        }
    }

}
 
示例9
/**
 * Sets the encoding of the scanner. This method is used by the
 * scanners if the XMLDecl or TextDecl line contains an encoding
 * pseudo-attribute.
 * <p>
 * <strong>Note:</strong> The underlying character reader on the
 * current entity will be changed to accomodate the new encoding.
 * However, the new encoding is ignored if the current reader was
 * not constructed from an input stream (e.g. an external entity
 * that is resolved directly to the appropriate java.io.Reader
 * object).
 *
 * @param encoding The IANA encoding name of the new encoding.
 *
 * @throws IOException Thrown if the new encoding is not supported.
 *
 * @see com.sun.org.apache.xerces.internal.util.EncodingMap
 */
public final void setEncoding(String encoding) throws IOException {

    if (DEBUG_ENCODINGS) {
        System.out.println("$$$ setEncoding: "+encoding);
    }

    if (fCurrentEntity.stream != null) {
        // if the encoding is the same, don't change the reader and
        // re-use the original reader used by the OneCharReader
        // NOTE: Besides saving an object, this overcomes deficiencies
        //       in the UTF-16 reader supplied with the standard Java
        //       distribution (up to and including 1.3). The UTF-16
        //       decoder buffers 8K blocks even when only asked to read
        //       a single char! -Ac
        if (fCurrentEntity.encoding == null ||
                !fCurrentEntity.encoding.equals(encoding)) {
            // UTF-16 is a bit of a special case.  If the encoding is UTF-16,
            // and we know the endian-ness, we shouldn't change readers.
            // If it's ISO-10646-UCS-(2|4), then we'll have to deduce
            // the endian-ness from the encoding we presently have.
            if(fCurrentEntity.encoding != null && fCurrentEntity.encoding.startsWith("UTF-16")) {
                String ENCODING = encoding.toUpperCase(Locale.ENGLISH);
                if(ENCODING.equals("UTF-16")) return;
                if(ENCODING.equals("ISO-10646-UCS-4")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4LE);
                    }
                    return;
                }
                if(ENCODING.equals("ISO-10646-UCS-2")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2LE);
                    }
                    return;
                }
            }
            // wrap a new reader around the input stream, changing
            // the encoding
            if (DEBUG_ENCODINGS) {
                System.out.println("$$$ creating new reader from stream: "+
                        fCurrentEntity.stream);
            }
            //fCurrentEntity.stream.reset();
            fCurrentEntity.reader = createReader(fCurrentEntity.stream, encoding, null);
            fCurrentEntity.encoding = encoding;

        } else {
            if (DEBUG_ENCODINGS)
                System.out.println("$$$ reusing old reader on stream");
        }
    }

}
 
示例10
/**
 * Sets the encoding of the scanner. This method is used by the
 * scanners if the XMLDecl or TextDecl line contains an encoding
 * pseudo-attribute.
 * <p>
 * <strong>Note:</strong> The underlying character reader on the
 * current entity will be changed to accomodate the new encoding.
 * However, the new encoding is ignored if the current reader was
 * not constructed from an input stream (e.g. an external entity
 * that is resolved directly to the appropriate java.io.Reader
 * object).
 *
 * @param encoding The IANA encoding name of the new encoding.
 *
 * @throws IOException Thrown if the new encoding is not supported.
 *
 * @see com.sun.org.apache.xerces.internal.util.EncodingMap
 */
public final void setEncoding(String encoding) throws IOException {

    if (DEBUG_ENCODINGS) {
        System.out.println("$$$ setEncoding: "+encoding);
    }

    if (fCurrentEntity.stream != null) {
        // if the encoding is the same, don't change the reader and
        // re-use the original reader used by the OneCharReader
        // NOTE: Besides saving an object, this overcomes deficiencies
        //       in the UTF-16 reader supplied with the standard Java
        //       distribution (up to and including 1.3). The UTF-16
        //       decoder buffers 8K blocks even when only asked to read
        //       a single char! -Ac
        if (fCurrentEntity.encoding == null ||
                !fCurrentEntity.encoding.equals(encoding)) {
            // UTF-16 is a bit of a special case.  If the encoding is UTF-16,
            // and we know the endian-ness, we shouldn't change readers.
            // If it's ISO-10646-UCS-(2|4), then we'll have to deduce
            // the endian-ness from the encoding we presently have.
            if(fCurrentEntity.encoding != null && fCurrentEntity.encoding.startsWith("UTF-16")) {
                String ENCODING = encoding.toUpperCase(Locale.ENGLISH);
                if(ENCODING.equals("UTF-16")) return;
                if(ENCODING.equals("ISO-10646-UCS-4")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4LE);
                    }
                    return;
                }
                if(ENCODING.equals("ISO-10646-UCS-2")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2LE);
                    }
                    return;
                }
            }
            // wrap a new reader around the input stream, changing
            // the encoding
            if (DEBUG_ENCODINGS) {
                System.out.println("$$$ creating new reader from stream: "+
                        fCurrentEntity.stream);
            }
            //fCurrentEntity.stream.reset();
            fCurrentEntity.reader = createReader(fCurrentEntity.stream, encoding, null);
            fCurrentEntity.encoding = encoding;

        } else {
            if (DEBUG_ENCODINGS)
                System.out.println("$$$ reusing old reader on stream");
        }
    }

}
 
示例11
/**
 * Sets the encoding of the scanner. This method is used by the
 * scanners if the XMLDecl or TextDecl line contains an encoding
 * pseudo-attribute.
 * <p>
 * <strong>Note:</strong> The underlying character reader on the
 * current entity will be changed to accomodate the new encoding.
 * However, the new encoding is ignored if the current reader was
 * not constructed from an input stream (e.g. an external entity
 * that is resolved directly to the appropriate java.io.Reader
 * object).
 *
 * @param encoding The IANA encoding name of the new encoding.
 *
 * @throws IOException Thrown if the new encoding is not supported.
 *
 * @see com.sun.org.apache.xerces.internal.util.EncodingMap
 */
public final void setEncoding(String encoding) throws IOException {

    if (DEBUG_ENCODINGS) {
        System.out.println("$$$ setEncoding: "+encoding);
    }

    if (fCurrentEntity.stream != null) {
        // if the encoding is the same, don't change the reader and
        // re-use the original reader used by the OneCharReader
        // NOTE: Besides saving an object, this overcomes deficiencies
        //       in the UTF-16 reader supplied with the standard Java
        //       distribution (up to and including 1.3). The UTF-16
        //       decoder buffers 8K blocks even when only asked to read
        //       a single char! -Ac
        if (fCurrentEntity.encoding == null ||
                !fCurrentEntity.encoding.equals(encoding)) {
            // UTF-16 is a bit of a special case.  If the encoding is UTF-16,
            // and we know the endian-ness, we shouldn't change readers.
            // If it's ISO-10646-UCS-(2|4), then we'll have to deduce
            // the endian-ness from the encoding we presently have.
            if(fCurrentEntity.encoding != null && fCurrentEntity.encoding.startsWith("UTF-16")) {
                String ENCODING = encoding.toUpperCase(Locale.ENGLISH);
                if(ENCODING.equals("UTF-16")) return;
                if(ENCODING.equals("ISO-10646-UCS-4")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS4LE);
                    }
                    return;
                }
                if(ENCODING.equals("ISO-10646-UCS-2")) {
                    if(fCurrentEntity.encoding.equals("UTF-16BE")) {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2BE);
                    } else {
                        fCurrentEntity.reader = new UCSReader(fCurrentEntity.stream, UCSReader.UCS2LE);
                    }
                    return;
                }
            }
            // wrap a new reader around the input stream, changing
            // the encoding
            if (DEBUG_ENCODINGS) {
                System.out.println("$$$ creating new reader from stream: "+
                        fCurrentEntity.stream);
            }
            //fCurrentEntity.stream.reset();
            fCurrentEntity.reader = createReader(fCurrentEntity.stream, encoding, null);
            fCurrentEntity.encoding = encoding;

        } else {
            if (DEBUG_ENCODINGS)
                System.out.println("$$$ reusing old reader on stream");
        }
    }

}