Il file in questione non è sotto il mio controllo. La maggior parte delle sequenze di byte è UTF-8 valida, non è ISO-8859-1 (o un'altra codifica). Voglio fare del mio meglio estrarre quante più informazioni possibili.Come rilevare sequenze di byte UTF-8 illegali per sostituirle in java inputstream?
Il file contiene alcune sequenze di byte illegali, quelle devono essere sostituite con il carattere di sostituzione.
Non è un compito facile, pensa che sia necessaria una certa conoscenza della macchina a stati UTF-8.
Oracle ha un involucro che fa quello che mi serve:
UTF8ValidationFilter javadoc
C'è qualcosa di simile a disposizione (in commercio o come software libero)?
Grazie
-stephan
Soluzione:
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);
Odio questo. i produttori di contenuti dovrebbero produrre contenuti validi, non chiedere ai consumatori di indovinare e correggere. Ciò ha causato così tanti problemi nel nostro settore. – irreputable