Этот файл не под моим контролем. Большинство байтовых последовательностей действительны UTF-8, это не ISO-8859-1 (или другое кодирование). Я хочу сделать все возможное, чтобы извлечь как можно больше информации.Как обнаружить незаконные последовательности байтов UTF-8 для их замены в java inputstream?
Файл содержит несколько нелегальных последовательностей байт, те должны быть заменяют замены символа.
Это не простая задача, это кажется, это требует некоторого знания о государственной машине UTF-8.
Oracle имеет оболочку, которая делает то, что мне нужно:
UTF8ValidationFilter javadoc
Есть ли что-то подобное доступно (коммерчески или как свободное программное обеспечение)?
Благодаря
-stephan
Решение:
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);
Ненавижу это. производители контента должны создавать достоверный контент, а не просить потребителей угадывать и исправлять. Это вызвало столько проблем в нашей отрасли. – irreputable