2013-02-26 22 views
5

मुझे लगता है कि आप Charset.forName("UTF-16") के माध्यम से यूआरएफ -16 को वर्णमाला के रूप में निर्दिष्ट कर सकते हैं, और आप Charset.forName("UTF-16").newDecoder() के माध्यम से एक नया यूटीएफ -16 डिकोडर बना सकते हैं, लेकिन मुझे InputStreamReader के निर्माता पर CharsetDecoder निर्दिष्ट करने की क्षमता दिखाई देती है।जावा में पढ़ने/लिखते समय यूटीएफ -16 को कैसे मजबूर किया जाए?

जावा में किसी भी स्ट्रीम को पढ़ने के दौरान आप यूटीएफ -16 का उपयोग करने के लिए कैसे निर्दिष्ट करते हैं?

+1

हैं, तो आप एक बाइट स्ट्रीम और चरित्र धारा के बीच की सीमा पर ऐसा कर सकते हैं। (इनपुटस्ट्रीम रीडर एक ऐसा वर्ग है, अन्य पाठक के लिए जो आपको चरित्र सेट निर्दिष्ट करने का विकल्प नहीं देता है, बस इसे इनपुटस्ट्रीम रीडर के आसपास लपेटें)। इनपुटस्ट्रीम (बाइट स्ट्रीम) के स्तर पर कम निर्माण में चरित्र सेट की अवधारणा नहीं है। – nhahtdh

उत्तर

11

इनपुट धारा कच्चे बाइट्स से निपटती है। जब आप सीधे इनपुट स्ट्रीम से पढ़ते हैं, तो आपको केवल कच्चे बाइट मिलते हैं जहां चरित्र सेट अप्रासंगिक होते हैं।

परिभाषा के अनुसार वर्णों में कच्चे बाइट्स की व्याख्या के लिए कुछ प्रकार के अनुवाद की आवश्यकता होती है: मैं कच्चे बाइट्स से एक पठनीय स्ट्रिंग में कैसे अनुवाद करूं? वह "अनुवाद" एक चरित्र सेट के रूप में आता है।

यह "जोड़ा गया" परत पाठकों द्वारा लागू किया गया है। इसलिए, स्ट्रीम से वर्ण (बाइट्स के बजाए) पढ़ने के लिए, आपको स्ट्रीम के शीर्ष पर किसी प्रकार के Reader (अपनी आवश्यकताओं के आधार पर) बनाने की आवश्यकता है। उदाहरण के लिए:

InputStream is = ...; 
Reader reader = new InputStreamReader(is, Charset.forName("UTF-16")); 

यह reader.read() कारण चरित्र आपके द्वारा निर्दिष्ट सेट का उपयोग कर वर्णों को पढ़ने के होंगे। आप पूरे लाइनों को पढ़ने के लिए चाहते हैं, तो शीर्ष पर BufferedReader का उपयोग करें: वर्ग यह अनुमति देता है

BufferedReader reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-16"))); 
String line = reader.readLine(); 
संबंधित मुद्दे