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

时间:2013-02-05 07:26:16

标签: java encoding inputstreamreader

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

我用InputStreamReader读取文件:

InputStreamReader reader = new InputStreamReader( 
    new FileInputStream(file), Charset.forName("UTF-8"));

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

是否有简单的方法可以在无效输入上抛出异常?

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

只需添加.newDecoder()

InputStreamReader reader = new InputStreamReader( 
    new FileInputStream(file), Charset.forName("UTF-8").newDecoder());