首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >所有包含字符集,以避免"java.nio.charset.MalformedInputException:输入长度= 1"?

所有包含字符集,以避免"java.nio.charset.MalformedInputException:输入长度= 1"?
EN

Stack Overflow用户
提问于 2014-10-08 23:41:32
回答 10查看 192.8K关注 0票数 116

我正在用Java创建一个简单的wordcount程序,它可以读取目录的基于文本的文件。

然而,我不断地得到错误:

代码语言:javascript
运行
复制
java.nio.charset.MalformedInputException: Input length = 1

在这一行代码中:

代码语言:javascript
运行
复制
BufferedReader reader = Files.newBufferedReader(file,Charset.forName("UTF-8"));

我知道这可能是因为我使用了一个Charset,它不包括文本文件中的一些字符,其中有些包含其他语言的字符。但我想把这些角色包括进去。

后来我在JavaDocs上了解到,Charset是可选的,只用于更有效地读取文件,因此我将代码更改为:

代码语言:javascript
运行
复制
BufferedReader reader = Files.newBufferedReader(file);

但是有些文件仍然会抛出MalformedInputException。我也不知道原因。

我想知道是否有一个包罗万象的Charset ,它允许我读取许多不同类型的字符的文本文件。

谢谢。

EN

Stack Overflow用户

发布于 2017-03-17 06:40:18

你可以尝试像这样的东西,或者只是复制和过去的片段。

代码语言:javascript
运行
复制
boolean exception = true;
Charset charset = Charset.defaultCharset(); //Try the default one first.        
int index = 0;

while(exception) {
    try {
        lines = Files.readAllLines(f.toPath(),charset);
          for (String line: lines) {
              line= line.trim();
              if(line.contains(keyword))
                  values.add(line);
              }           
        //No exception, just returns
        exception = false; 
    } catch (IOException e) {
        exception = true;
        //Try the next charset
        if(index<Charset.availableCharsets().values().size())
            charset = (Charset) Charset.availableCharsets().values().toArray()[index];
        index ++;
    }
}
票数 -1
EN
查看全部 10 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26268132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档