2013-02-05 14 views
6

UTF-8 kodlu olması gereken bazı baytlarımız var, ancak kullanıcı bir şekilde metin editörünü doğru şekilde kullanmadıysa, bir metin içeren bir ISO8859-1 kodlaması içerebilir. Iso8859-1 saklanan zamannasıl InputStreamReader kodlaması için geçersiz veriler üzerinde başarısız kılmak?

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

Ama kullanıcı geçersiz UTF-8 olan "ä" gibi umlauts kullanan her zaman InputStreamReader şikayet etmiyor ama ekler:

Bir InputStreamReader ile dosyayı okumak yer tutucu karakterleri.

Bu girişin geçersiz girişte İstisnası yapmanın basit bir yolu var mı?

cevap

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

teşekkürler! Bunu yapmak için bir API olduğunu bilmiyordum. – Daniel

1

Basitçe eklemek .newDecoder():

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