例如我有以下代码
Source.fromFile(new File( path), "UTF-8").getLines()
并引发异常
Exception in thread "main" java.nio.charset.MalformedInputException: Input length = 1
at java.nio.charset.CoderResult.throwException(CoderResult.java:260)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:319)
我不在乎是否未读取某些行,但是如何跳过无效字符并继续读取行?
您可以通过调用来影响字符集解码处理无效输入的方式CharsetDecoder.onMalformedInput
。
通常,
您永远不会CharsetDecoder
直接看到对象,因为它将在后台为您创建。因此,如果需要访问它,则需要使用API,该API允许您CharsetDecoder
直接指定(而不是仅编码名称或Charset
)。
此类API的最基本示例是InputStreamReader
:
InputStream in = ...;
CharsetDecoder decoder = StandardCharsets.UTF_8.newDecoder();
decoder.onMalformedInput(CodingErrorAction.IGNORE);
Reader reader = new InputStreamReader(in, decoder);
请注意,此代码使用了Java
7类StandardCharsets
,对于早期版本,你可以简单地替换它Charset.forName("UTF-8")
(或使用的Charsets
类从番石榴)。
问题内容: 我正在尝试使用PHP解析XML文件,但出现错误消息: 解析器错误:字符0x0超出允许的范围 我认为这是因为XML的内容所致,我认为有一个特殊的符号“☆”,我有什么想法可以解决该问题? 我也得到: 解析器错误:标签项目行中的数据过早结束 是什么导致该错误? 我正在使用。 更新: 我尝试找到错误行并将其内容粘贴为单个xml文件,它可以正常工作!所以我仍然不知道是什么使xml文件解析失败。P
我一直在尝试将更多的函数式编程融入到我所做的事情中,因为我编写的代码具有无副作用的性质,并且在并发代码中具有实用性。我遇到了需要过滤掉java流的连续元素的情况,并且没有比简单的旧命令方法更好的函数方法了。假设我有一个记录参数的程序,我想过滤掉两个连续的元素。例如,。我在日志中想要的是。 我提出了几种方法,但没有一种方法比使用for循环更容易理解,该循环索引了我需要过滤掉的内容。 这似乎是一件很平
使用poi读取某些excel失败,遇到此错误 从,存在
问题内容: 我的应用程序中有2个过滤器。根据某些条件,我想选择是否执行第二个过滤器。有没有办法做到这一点? 我做了一些谷歌搜索,但没有成功。我希望请求继续执行而不执行第二个过滤器。那可能吗? 任何帮助将不胜感激。 问题答案: 您可以在请求中设置一个属性,然后在第二个过滤器中对其进行检查。 您可以像这样简化上面的代码: 这样,您只需检查属性“ executeSecondFilter”的存在
问题内容: 我有一个XML文件,它是数据库的输出。我正在使用Java SAX解析器来解析XML并以其他格式输出它。XML包含一些无效字符,并且解析器抛出诸如“无效Unicode字符(0x5)”之类的错误 除了逐行预处理文件并替换它们之外,是否有一种很好的方法可以去除所有这些字符?到目前为止,我遇到了3个不同的无效字符(0x5、0x6和0x7)。这是一个约4gb的数据库转储,我们将对其进行大量处理,
为什么上面的无效字符是常量,这在JavaScript中工作得很完美。我想显示英尺和英寸的高度,并且使用了这个客户端,但是当我在服务器端使用相同的高度时,它显示。