【发布时间】:2011-04-17 15:27:27
【问题描述】:
有问题的文件不在我的控制之下。大多数字节序列都是有效的 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 encoding utf-8 inputstream illegal-characters