प्रश्न में फ़ाइल मेरे नियंत्रण में नहीं है। अधिकांश बाइट अनुक्रम मान्य यूटीएफ -8 हैं, यह आईएसओ -885 9 -1 (या एक अन्य एन्कोडिंग) नहीं है। मैं जितना संभव हो उतना अधिक जानकारी निकालने के लिए अपना सर्वश्रेष्ठ प्रयास करना चाहता हूं।जावा इनपुटस्ट्रीम में उन्हें बदलने के लिए अवैध यूटीएफ -8 बाइट अनुक्रमों का पता कैसे लगाएं?
फ़ाइल में कुछ अवैध बाइट अनुक्रम शामिल हैं, जिन्हें प्रतिस्थापन चरित्र के साथ प्रतिस्थापित किया जाना चाहिए।
यह एक आसान काम नहीं है, ऐसा लगता है कि इसे यूटीएफ -8 राज्य मशीन के बारे में कुछ जानकारी चाहिए।
UTF8ValidationFilter javadoc
वहाँ ऐसा ही कुछ उपलब्ध (व्यावसायिक रूप से या के रूप में मुफ्त सॉफ्टवेयर) है:
ओरेकल जो मैं क्या आवश्यकता है एक आवरण है?
धन्यवाद
-stephan
समाधान:
final BufferedInputStream in = new BufferedInputStream(istream);
final CharsetDecoder charsetDecoder = StandardCharsets.UTF_8.newDecoder();
charsetDecoder.onMalformedInput(CodingErrorAction.REPLACE);
charsetDecoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
final Reader inputReader = new InputStreamReader(in, charsetDecoder);
मुझे इससे नफरत है। सामग्री उत्पादकों को वैध सामग्री का उत्पादन करना चाहिए, उपभोक्ताओं को अनुमान लगाने और सही करने के लिए नहीं कहना चाहिए। इससे हमारे उद्योग में इतनी परेशानी हो रही है। – irreputable