2012-03-29 17 views
16

मेरे पास एक XML फ़ाइल है जिसमें अरबी वर्ण हैं। जब मैं किसी फ़ाइल को पार्स करने का प्रयास करता हूं, तो यह अपवाद उत्पन्न होता है, MalformedByteSequenceException: 2-बाइट यूटीएफ- 8 अनुक्रम। मैं दस्तावेज पार्स के लिए पीओआई डोम का उपयोग करता हूं।MalformedByteSequenceException: 2-बाइट यूटीएफ -8 अनुक्रम का अमान्य बाइट 2

लॉग है,

2012-03-19 11:30:00,433 [ERROR] (com.infomindz.remitglobe.bll.remittance.BlackListBean) - Error 

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte UTF-8 sequence. 

    at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(Unknown Source) 

    at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source) 

    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source) 

    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipChar(Unknown Source) 

    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source) 

    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) 

    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) 

    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 

    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 

    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) 

    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) 

    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) 

    at javax.xml.parsers.DocumentBuilder.parse(Unknown Source) 

    at com.infomindz.remitglobe.bll.remittance.BlackListBean.updateGeneralBlackListDetail(Unknown Source) 

    at com.infomindz.remitglobe.bll.remittance.schedulers.BlackListUpdateScheduler.executeInternal(Unknown Source) 

    at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86) 

    at org.quartz.core.JobRunShell.run(JobRunShell.java:216) 

    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549) 

अपवाद खिड़कियों मशीन में केवल उत्पन्न होती हैं, लिनक्स Machine.How में ही नहीं उठता मैं हल कर सकते हैं issue.Any सुझाव सराहनीय होना चाहिए।

उत्तर

13

मैंने यूटीएफ 8 प्रारूप का उपयोग कर एक्सएमएल फ़ाइल बनाकर समस्या का समाधान किया है।

OutputStreamWriter bufferedWriter = new OutputStreamWriter(filePath + 
         System.getProperty("file.separator") + fileName), "UTF8"); 

उपरोक्त कोड का उपयोग कर फ़ाइल बनाने के बाद, एन्कोडिंग समस्या हल हो गई है। प्रत्येक के लिए धन्यवाद, यहां प्रयास करें।

+3

यह समाधान है कि मेरे लिए काम किया है, लेकिन मैं एक छोटे से परिवर्तन करने के लिए किया था: OutputStream ओएस = नए FileOutputStream (फ़ाइल); और आउटपुटस्ट्रीमवाइटर bufferedWriter = नया आउटपुटस्ट्रीमवाइटर (ओएस, "यूटीएफ 8"); – maxivis

0

मुझे लगता है कि आपका पार्सर यूटीएफ -8 में एन्कोडेड बाइट की अपेक्षा करता है और इसे विभिन्न एन्कोडिंग में प्राप्त करता है। फ़ाइल के एन्कोडिंग की जांच करें।

एक संभावित समाधान फ़ाइल को यूटीएफ -8 में परिवर्तित कर सकता है।

आप एक यूनिक्स सिस्टम है, तो आप इस उपकरण

iconv -f original_charset -t utf-8 your_file > new_file 
0

यह है ओएस आधारित शुरू दस्तावेज़ वर्ण का उपयोग कर सकते हैं। आपको कुछ बाइट-व्यूअर का उपयोग करना चाहिए और इसे अपने दस्तावेज़ से हटा देना चाहिए। नियंत्रण वर्णों को परिवर्तित करने के लिए आप unix2dos जैसे कुछ उपयोग करने का प्रयास कर सकते हैं।

3

हम संदेश से बता सकते हैं कि फ़ाइल यूटीएफ -8 में ठीक से एन्कोड नहीं है। काम करने के लिए, आपको इतिहास का पता लगाने की आवश्यकता होगी कि फ़ाइल कैसे बनाई गई थी। वास्तविक एन्कोडिंग क्या है यह देखने के लिए यह बाइनरी स्तर पर फ़ाइल सामग्री का अध्ययन करने में सहायक हो सकता है (या नहीं)। उदाहरण के लिए, यह जानना उपयोगी हो सकता है कि पूरी फ़ाइल गलत एन्कोडिंग में है, या क्या इसमें गलत एन्कोडिंग में कुछ भटक वर्ण हैं या नहीं।

7

आप अपने जेवीएम में एक जेवीएम पैरामीटर -Dfile.encoding = utf-8 जोड़ सकते हैं।

1

काफी सरल उपाय:

File file = new File("c:\\file-utf.xml"); 
InputStream inputStream= new FileInputStream(file); 
Reader reader = new InputStreamReader(inputStream,"UTF-8"); 

InputSource is = new InputSource(reader); 
// is.setEncoding("UTF-8"); -> This line causes error! Content is not allowed in prolog 

saxParser.parse(is, handler); 

रेफरी: http://www.mkyong.com/java/sax-error-malformedbytesequenceexception-invalid-byte-1-of-1-byte-utf-8-sequence/

संबंधित मुद्दे