首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

回答 10

Stack Overflow用户

回答已采纳

发布于 2014-10-08 23:53:21

您可能希望有一个受支持的编码列表。对于每个文件,依次尝试每个编码,可能从UTF-8开始。每次捕获MalformedInputException时,都尝试下一个编码。

票数 94
EN

Stack Overflow用户

发布于 2017-04-17 07:02:37

从BufferedReader创建Files.newBufferedReader

代码语言:javascript
运行
复制
Files.newBufferedReader(Paths.get("a.txt"), StandardCharsets.UTF_8);

在运行应用程序时,它可能引发以下异常:

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

代码语言:javascript
运行
复制
new BufferedReader(new InputStreamReader(new FileInputStream("a.txt"),"utf-8"));

效果很好。

不同的是,前者使用CharsetDecoder默认操作。

错误输入和不可映射字符错误的默认操作是报告错误。

后者使用替换操作。

代码语言:javascript
运行
复制
cs.newDecoder().onMalformedInput(CodingErrorAction.REPLACE).onUnmappableCharacter(CodingErrorAction.REPLACE)
票数 54
EN

Stack Overflow用户

发布于 2017-05-29 02:40:18

ISO-8859-1是一个包罗万象的字符集,它保证不会抛出MalformedInputException.因此,即使您的输入不在此字符集中,也可用于调试。所以:-

代码语言:javascript
运行
复制
req.setCharacterEncoding("ISO-8859-1");

我的输入中有一些双右引号/双左引号字符,US和UTF-8都将MalformedInputException扔在了它们上,但ISO-8859-1有效。

票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26268132

复制
相关文章

相似问题

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