一尘不染

如何检测非法的UTF-8字节序列以将其替换为java inputstream?

java

该文件不在我的控制之下。大多数字节序列是有效的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);

阅读 232

收藏
2020-12-03

共1个答案

一尘不染

java.nio.charset.CharsetDecoder可以满足您的需求。此类为字符集解码提供了针对不同类型错误的用户可定义的操作(请参阅onMalformedInput()onUnmappableCharacter())。

CharsetDecoder写入OutputStream,您可以将其写入InputStream使用中java.io.PipedOutputStream,从而有效地创建过滤条件InputStream

2020-12-03