हमने हाल ही में जेडीके 7 से जेडीके 8 पर अपना आवेदन माइग्रेट किया है। परिवर्तन के बाद, हम कोड के निम्नलिखित स्निपेट के साथ एक समस्या में भाग गए।यूटीएफ -8 डिकोडिंग में जावा 8 परिवर्तन
String output = new String(byteArray, "UTF-8");
बाइट सरणी में अवैध यूटीएफ -8 बाइट अनुक्रम हो सकते हैं। UTF-8 डिकोडिंग पर एक ही बाइट सरणी, जावा 7 और जावा 8.
पर दो अंतर तार में परिणाम answer को यह SO post, जावा 8 "फिक्स" जावा 7 में किसी त्रुटि के अनुसार और की जगह अवैध UTF-8 एक प्रतिस्थापन स्ट्रिंग के साथ बाइट अनुक्रम, जो यूटीएफ -8 विनिर्देश के अनुसार है।
लेकिन हम डीकोडेड स्ट्रिंग के जावा 7 के संस्करण के साथ रहना चाहते हैं।
हम CodingErrorAction साथ CharsetDecoder उपयोग करने के लिए के रूप में बदलें, रिपोर्ट और जावा 8. फिर भी पर ध्यान न दें की कोशिश की है, हम जावा के रूप में ही स्ट्रिंग उचित की एक तकनीक के साथ 7.
हम यह कर सकता उत्पन्न करने में सक्षम नहीं थे जटिलता?
कृपया सटीक इनपुट 'बाइटएरे' (इससे न्यूनतम अंश) पोस्ट करें, ताकि हम आपकी समस्या का पुनरुत्पादन कर सकें। –
यदि आपकी समस्या वास्तव में है कि गलत तरीके से एन्कोडेड सरोगेट जोड़े हैं, तो 'कोडिंग एररएक्शन' आपकी मदद नहीं करेगा। 'यूटीएफ -8' और' संशोधित यूटीएफ -8 'के बारे में सोचें, जो कि पूरी तरह से अलग-अलग एन्कोडिंग हैं। उस स्थिति में आप किसी अन्य एन्कोडिंग पर स्विच करने में त्रुटि पुनर्प्राप्ति विकल्प की अपेक्षा नहीं करेंगे, है ना? तो आपको तब क्या चाहिए, एक वैकल्पिक 'वर्णसेट' कार्यान्वयन है, लेकिन यह लिंक किए गए उत्तर की पांच पंक्तियों से आसान नहीं होगा। – Holger
@ होल्गर मुझे यकीन नहीं है कि "केवल" गलत तरीके से एन्कोडेड सरोगेट जोड़े हैं, कोड वास्तव में इस नए स्ट्रिंग (एचएमएसी.डोफिनल (बाइटएरे), "यूटीएफ -8" जैसे कुछ करता है)। यहां एचएमएसी मैक का एक उदाहरण है। यह किसी भी वैध यूटीएफ -8 एन्कोडेड स्ट्रिंग (इसके कुछ हिस्सों) से भी नहीं है। यदि हम दूसरे पोस्ट में उल्लिखित समाधान का पालन करते हैं, तो हमें अमान्य यूटीएफ -8 अक्षरों के लिए अपवाद मिलता है। – Jiraiya