2015-03-07 8 views
5

में कीबोर्ड से पढ़ें मुझे उपयोगकर्ता से इनपुट पढ़ने की जरूरत है, और मैं गैर, लैटिन अक्षरों जैसे Å, Ä और Ö के लिए समर्थन प्राप्त करना चाहता हूं।यूटीएफ -8

BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in)); 
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out, "UTF-8"), true); 
out.println(keyboard.readLine()); 
out.println("Read with charset: " + Charset.defaultCharset().name()); 

मुझे इस कोड, और इनपुट एक लैटिन पत्र के रूप में की उम्मीद काम करता है चलाने के (मैं कुछ, प्रेस दर्ज दर्ज करें और इसे बाहर प्रिंट मैं क्या दर्ज की गई)। लेकिन अगर मैं एक साथ कोशिश मैं इस मिल:

å 

� 
Read with charset: UTF-8 

मैं दो बार दर्ज पाठ एक गैर-लैटिन पत्र के साथ समाप्त होता है, तो हिट करने के लिए है, और फिर इसे उन्हें सही प्रदर्शित नहीं करता है। मैंने नेटबीन्स कंसोल में और विंडोज कमांड प्रॉम्प्ट में यह कोशिश की है और न ही अपेक्षित परिणाम देता है।


मैं UTF-8 के साथ एक समाधान नहीं मिल सकता है, लेकिन इसके बजाय ISO-8859-1 के साथ चला गया। यह मेरे नेटबीन्स कंसोल (जो निश्चित रूप से यूटीएफ -8 होना चाहिए) के साथ काम किया और सीएमडी में जब मैंने पहली बार chcp 28591 चलाया, तो फ़ॉन्ट बदल गया (यह मेरे मामले में आवश्यक था) और मेरा प्रोग्राम चलाया।

+0

http://stackoverflow.com/questions/4597749/read-write-txt-file-with-special-characters और http://stackoverflow.com/questions/9281629/read-special-characters-in-java -with-bufferedreader – crAlexander

+0

यह मेरे लिए काम करता है। आपका कंसोल सेट अप होना चाहिए ताकि यूटीएफ -8 को सही तरीके से प्रदर्शित न किया जा सके। – RealSkeptic

+0

@RealSkeptic, मैं गैर-लैटिन वर्णों को मुद्रित कर सकता हूं, कोई समस्या नहीं (Sys.out.print ("å"))। यह Netbeans कंसोल और सीएमडी दोनों में ठीक काम करता है। लेकिन जब मैं पात्रों को पढ़ने की कोशिश करता हूं तो समस्या होती है (साथ ही टेक्स्ट को å ä या ö के साथ समाप्त होने पर दो बार दर्ज करना पड़ता है)। –

उत्तर

0

आप की कोशिश की है:

BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in,"UTF-8")); 

इस new String(bytes,"UTF-8")

+0

यदि आप एक वर्णमाला निर्दिष्ट नहीं करते हैं तो यह डिफ़ॉल्ट के साथ जाएगा (जो मेरे मामले में यूटीएफ -8 है, जैसा कि आप मेरे प्रश्न में देख सकते हैं)। मैंने कच्चे बाइट्स को पढ़ने के साथ-साथ सफलता के साथ आपके अन्य सुझावों की भी कोशिश की। हालांकि मुझे एक कामकाज मिला (इसके बजाय आईएसओ -885 9 -1 का इस्तेमाल किया गया)। –

+0

विश्वास नहीं कर सकता कि यह आईएसओ -885 9 -1 यूटीएफ -8 नहीं उपयोग करता है। मैंने सोचा कि यूटीएफ -8 आजकल काफी मानक था लेकिन शायद नहीं। –

1

कोड नमूना किसी भी तरह से ठीक से एन्कोडिंग नहीं है को बदलने तो कच्चे बाइट धारा पढ़ने की कोशिश काम नहीं करता है। यह सिस्टम डिफ़ॉल्ट का उपयोग कर कंसोल से डेटा में पढ़ रहा है और फिर इसे यूटीएफ -8 का उपयोग करके लिख रहा है। आपका सिस्टम डिफ़ॉल्ट यूटीएफ -8 नहीं हो सकता है और चीजों को जटिल करने के लिए, आपका कंसोल आपके सिस्टम के डिफ़ॉल्ट के समान हो सकता है या नहीं भी हो सकता है।

कंसोल में इसे सही तरीके से करने के लिए, आपको अपने कंसोल एन्कोडिंग का उपयोग करने और अपने कंसोल एन्कोडिंग का उपयोग करके लिखना होगा। यदि आप बस इसका परीक्षण कर रहे हैं और फ़ाइल में लिखने की आवश्यकता है, उदाहरण के लिए, इसे यूटीएफ -8 के रूप में लिखें और सुनिश्चित करें कि आप इसे टेक्स्ट-एडिटर के साथ यूटीएफ -8 के रूप में खोलें।

+0

नेटबीन्स कंसोल यूटीएफ -8 है, जब तक नेटबीन्स के साथ कोई बग नहीं है। हालांकि मुझे एक काम-आसपास मिला (मेरा अद्यतन प्रश्न देखें)। –

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