该文件不在我的控制之下。大多数字节序列是有效的UTF-8,而不是ISO-8859-1(或其他编码)。我想尽我所能提取尽可能多的信息。
该文件包含一些非法字节序列,应将其替换为替换字符。
这不是一件容易的事,它认为它需要有关UTF-8状态机的一些知识。
Oracle有一个我需要做的包装器: UTF8ValidationFilter javadoc
是否有类似的东西可用(商业或免费软件)?
谢谢- 斯蒂芬
解:
final BufferedInputStream in = new BufferedInputStream(istream); final CharsetDecoder charsetDecoder = StandardCharsets.UTF_8.newDecoder(); charsetDecoder.onMalformedInput(CodingErrorAction.REPLACE); charsetDecoder.onUnmappableCharacter(CodingErrorAction.REPLACE); final Reader inputReader = new InputStreamReader(in, charsetDecoder);
java.nio.charset.CharsetDecoder可以满足您的需求。此类为字符集解码提供了针对不同类型错误的用户可定义的操作(请参阅onMalformedInput()和onUnmappableCharacter())。
onMalformedInput()
onUnmappableCharacter()
CharsetDecoder写入OutputStream,您可以将其写入InputStream使用中java.io.PipedOutputStream,从而有效地创建过滤条件InputStream。
CharsetDecoder
OutputStream
InputStream
java.io.PipedOutputStream