我正在用Java创建一个简单的wordcount程序,它可以读取目录的基于文本的文件。
然而,我不断地得到错误:
java.nio.charset.MalformedInputException: Input length = 1在这一行代码中:
BufferedReader reader = Files.newBufferedReader(file,Charset.forName("UTF-8"));我知道这可能是因为我使用了一个Charset,它不包括文本文件中的一些字符,其中有些包含其他语言的字符。但我想把这些角色包括进去。
后来我在JavaDocs上了解到,Charset是可选的,只用于更有效地读取文件,因此我将代码更改为:
BufferedReader reader = Files.newBufferedReader(file);但是有些文件仍然会抛出MalformedInputException。我也不知道原因。
我想知道是否有一个包罗万象的Charset ,它允许我读取许多不同类型的字符的文本文件。
谢谢。
发布于 2014-10-08 23:53:21
您可能希望有一个受支持的编码列表。对于每个文件,依次尝试每个编码,可能从UTF-8开始。每次捕获MalformedInputException时,都尝试下一个编码。
发布于 2017-04-17 07:02:37
从BufferedReader创建Files.newBufferedReader
Files.newBufferedReader(Paths.get("a.txt"), StandardCharsets.UTF_8);在运行应用程序时,它可能引发以下异常:
java.nio.charset.MalformedInputException: Input length = 1但
new BufferedReader(new InputStreamReader(new FileInputStream("a.txt"),"utf-8"));效果很好。
不同的是,前者使用CharsetDecoder默认操作。
错误输入和不可映射字符错误的默认操作是报告错误。
后者使用替换操作。
cs.newDecoder().onMalformedInput(CodingErrorAction.REPLACE).onUnmappableCharacter(CodingErrorAction.REPLACE)发布于 2017-05-29 02:40:18
ISO-8859-1是一个包罗万象的字符集,它保证不会抛出MalformedInputException.因此,即使您的输入不在此字符集中,也可用于调试。所以:-
req.setCharacterEncoding("ISO-8859-1");我的输入中有一些双右引号/双左引号字符,US和UTF-8都将MalformedInputException扔在了它们上,但ISO-8859-1有效。
https://stackoverflow.com/questions/26268132
复制相似问题