【问题标题】:How make InputStreamReader fail on invalid data for encoding?如何使 InputStreamReader 对无效数据进行编码失败?
【发布时间】:2013-02-05 07:26:15
【问题描述】:

我有一些应该是 UTF-8 编码的字节,但如果用户不知何故未能以正确的方式使用他的文本编辑器,则其中可能包含的文本是 ISO8859-1 编码。

我使用 InputStreamReader 读取文件:

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

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

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

【问题讨论】:

    标签: java encoding inputstreamreader


    【解决方案1】:
    CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder();
    decoder.onMalformedInput(CodingErrorAction.REPORT);
    decoder.onUnmappableCharacter(CodingErrorAction.REPORT);
    InputStreamReader reader = new InputStreamReader(
        new FileInputStream(file), decoder);
    

    【讨论】:

    • 谢谢!不知道有 API 可以做到这一点。
    【解决方案2】:

    只需添加.newDecoder():

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

    【讨论】:

      猜你喜欢
      • 2017-02-19
      • 2022-11-05
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 2018-04-28
      • 1970-01-01
      相关资源
      最近更新 更多