2013-02-05 5 views
6

मेरे पास कुछ बाइट्स हैं जो यूटीएफ -8 एन्कोडेड होना चाहिए, लेकिन जिसमें टेक्स्ट हो सकता है, आईएसओ 885 9 -1 एन्कोडिंग है, यदि उपयोगकर्ता किसी भी तरह से अपने टेक्स्ट एडिटर का सही तरीके से उपयोग नहीं कर पाता है।एन्कोडिंग के लिए अमान्य डेटा पर इनपुटस्ट्रीम रीडर कैसे विफल हो जाता है?

मैं एक InputStreamReader साथ फ़ाइल को पढ़ने:

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

लेकिन हर बार उपयोगकर्ता 'ए' की तरह उमलॉट जो अवैध UTF-8 कर रहे हैं का उपयोग करता है जब iso8859-1 में संग्रहीत InputStreamReader शिकायत नहीं करता, लेकिन कहते हैं प्लेसहोल्डर पात्र।

क्या यह अमान्य इनपुट पर अपवाद को फेंकने का आसान तरीका है?

उत्तर

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

धन्यवाद! यह नहीं पता था कि ऐसा करने के लिए एक एपीआई था। – Daniel

1

सीधे शब्दों में जोड़ने .newDecoder():

InputStreamReader reader = new InputStreamReader( 
    new FileInputStream(file), Charset.forName("UTF-8").newDecoder()); 
संबंधित मुद्दे