如何使InputStreamReader在无效数据上失败以进行编码?

Dan*_*iel 6 java encoding inputstreamreader

我有一些字节应该是UTF-8编码,但其中可能包含文本是ISO8859-1编码,如果用户以某种方式没有设法使用他的文本编辑器正确的方式.

我用InputStreamReader读取文件:

InputStreamReader reader = new InputStreamReader( 
    new FileInputStream(file), Charset.forName("UTF-8"));
Run Code Online (Sandbox Code Playgroud)

但是每次用户使用像ä"这样的变音符号时,如果存储在ISO8859-1中是无效的UTF-8,则InputStreamReader不会抱怨但会添加占位符字符.

是否有简单的方法使这个无效输入抛出异常?

Mik*_*rov 6

CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder();
decoder.onMalformedInput(CodingErrorAction.REPORT);
decoder.onUnmappableCharacter(CodingErrorAction.REPORT);
InputStreamReader reader = new InputStreamReader(
    new FileInputStream(file), decoder);
Run Code Online (Sandbox Code Playgroud)