Java InputStreamReader未引发UnsupportedEncodingException

Java InputStreamReader未引发UnsupportedEncodingException,java,character-encoding,Java,Character Encoding,如果我将一个UTF-16编码的文件传递给以下代码,那么我会得到一个UnsupportedEncodingException吗 try { BufferedReader br = new BufferedReader(new InputStreamReader(in, Charset.forName("UTF-8"))); String ip; while ((ip = br.readLine()) != null){

如果我将一个UTF-16编码的文件传递给以下代码,那么我会得到一个UnsupportedEncodingException吗

    try {
        BufferedReader br = new BufferedReader(new InputStreamReader(in, Charset.forName("UTF-8")));
        String ip;
        while ((ip = br.readLine()) != null){
            //do something
        }
    } catch (UnsupportedEncodingException use) { 
        //when can I expect an exception?
    }

我已经用UTF-16文件尝试过了,但是我没有得到任何异常。读者不知何故试图阅读所有的字符,这使得它阅读的行比预期的多。例如,在一个包含3行的示例文件中,读取器读取5行,其中2行为空行。

仅当传递给
charset.forName()
的字符集的名称不受支持时才会引发UnsupportedEncodingException
。它与流的内容无关(异常被声明为由
字符集.forName()
引发,而不是由
BufferedReader
InputStreamReader
类引发)。

如果不支持该编码,则会引发异常
UTF-8
UTF-16
都是受支持且有效的编码。如果要检测编码错误,则不能使用“标准”Java类;您必须通过
字符集解码器
。另请参见
CodingErrorAction
类:所有类的默认值都是
CodingErrorAction。替换
而不是
报告
请注意,奇怪的是,除了
CharsetDecoder
之外,JDK中没有任何类允许您检测编码错误。。。甚至连
阅读器都没有。如果您想这样做,您必须创建自己的
阅读器
实现!那太糟糕了。谢谢大家,是的+1让我知道我在找CharsetDecoderI,我可以在10分钟内接受这个。那么,我应该怎么做才能确定我是否得到了正确编码的流?检测文件内容编码: