7

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

我用 InputStreamReader 读取文件:

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

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

有没有简单的方法可以让这个在无效输入时抛出异常?

4

2 回答 2

7
CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder();
decoder.onMalformedInput(CodingErrorAction.REPORT);
decoder.onUnmappableCharacter(CodingErrorAction.REPORT);
InputStreamReader reader = new InputStreamReader(
    new FileInputStream(file), decoder);
于 2013-02-05T07:31:57.590 回答
1

只需添加.newDecoder()

InputStreamReader reader = new InputStreamReader( 
    new FileInputStream(file), Charset.forName("UTF-8").newDecoder());
于 2013-02-05T10:00:13.933 回答