2013-02-05 9 views
6

Ho alcuni byte che dovrebbero essere codificati in UTF-8, ma che possono contenere un testo è la codifica ISO8859-1, se l'utente non è riuscito in qualche modo a utilizzare il suo editor di testo nel modo giusto.Come far fallire InputStreamReader su dati non validi per la codifica?

ho letto il file con un InputStreamReader:

InputStreamReader reader = new InputStreamReader( 
    new FileInputStream(file), Charset.forName("UTF-8")); 

Ma ogni volta che l'utente utilizza dieresi come "A", che sono validi UTF-8 se conservata in ISO8859-1 l'InputStreamReader non si lamenta, ma aggiunge personaggi segnaposto.

C'è un modo semplice per fare questo lanciare un'eccezione su input non validi?

risposta

6
CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder(); 
decoder.onMalformedInput(CodingErrorAction.REPORT); 
decoder.onUnmappableCharacter(CodingErrorAction.REPORT); 
InputStreamReader reader = new InputStreamReader(
    new FileInputStream(file), decoder); 
+0

Grazie! Non sapevo che esistesse un'API per farlo. – Daniel

1

Basta aggiungere .newDecoder():

InputStreamReader reader = new InputStreamReader( 
    new FileInputStream(file), Charset.forName("UTF-8").newDecoder());