Die fragliche Datei ist nicht unter meiner Kontrolle. Die meisten Bytefolgen sind gültig UTF-8, es ist nicht ISO-8859-1 (oder eine andere Kodierung). Ich möchte mein Bestes tun, um so viele Informationen wie möglich zu extrahieren.Wie erkennen Sie illegale UTF-8-Byte-Sequenzen, um sie in Java-Inputstream zu ersetzen?
Die Datei enthält einige ungültige Bytefolgen, diese sollten durch das Ersatzzeichen ersetzt werden.
Es ist keine einfache Aufgabe, es erfordert einige Kenntnisse über die UTF-8-Zustandsmaschine.
Oracle hat einen Wrapper, der das tut, was ich brauche:
UTF8ValidationFilter javadoc
Gibt es so etwas wie die zur Verfügung (im Handel oder als freie Software)?
Dank
-Stephan
Lösung:
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);
Ich hasse das. Content-Produzenten sollten gültige Inhalte produzieren und die Konsumenten nicht dazu auffordern, zu raten und zu korrigieren. Das hat in unserer Branche so viel Ärger verursacht. – irreputable