2009-07-08 9 views
5

का उपयोग कर http के माध्यम से सर्वर से सर्वर से यूटीएफ 8 स्ट्रिंग पढ़ना मैं जावा एमआईडीपी का उपयोग कर उस सर्वर से यूटीएफ -8 तारों को पढ़ना चाहता हूं। मेरा सर्वर यूटीएफ -8 डेटा भेज रहा है। निम्नलिखित कोड करीब हो जाता है:एमआईडीपी

 c = (StreamConnection) Connector.open(
      myServer, Connector.READ_WRITE); 
     InputStream is = c.openInputStream(); 
     StringBuffer sb = new StringBuffer(); 
     int ch; 
     while((ch = is.read()) != -1) 
      sb.append((char)ch + "->" + ch + "\n"); 

मैं चार और डीबगिंग उद्देश्यों के लिए अपने कोड प्रिंट। मुझे लगता है कि यह एएससीआईआई अक्षर यहां पढ़ रहा है, इसलिए, जब मेरे पास कुछ char है जिसमें 127 से ऊपर का कोड है तो मुझे दो अक्षर मिलते हैं, जैसे कि दो उदाहरण बोले:

पत्र। यूटीएफ कोड ई 1 (हेक्स)। मुझे 1 9 5 और फिर 161

पत्र ô। यूटीएफ कोड एफ 4 (हेक्स)। मुझे 1 9 5 और फिर 180

मेरा सवाल है, क्या मेरे पास यूटीएफ पात्रों को सीधे पढ़ने का कोई तरीका है। मुझे वेब में कुछ समाधान मिल गए हैं लेकिन एमआईडीपी में कोई भी फिट नहीं है।

उत्तर

10

बाइट पढ़ने के बजाय, अक्षर पढ़ें। बाइट्स को वर्णों में परिवर्तित करने और यूटीएफ -8 एन्कोडर के माध्यम से चलाने के लिए InputStreamReader API का उपयोग करें। इसे जावाएमई सीएलडीसी (जेएसआर 30) प्रोफाइल के हिस्से के रूप में समर्थित किया जाना चाहिए; वह जगह है जहां लिंक अंक। इस तरह

कोशिश कुछ:

c = (StreamConnection) Connector.open(
     myServer, Connector.READ_WRITE); 
Reader r = new InputStreamReader(c.openInputStream(), "UTF-8"); 
StringBuffer sb = new StringBuffer(); 
int ch; 
while((ch = r.read()) != -1) 
    sb.append((char)ch + "->" + ch + "\n"); 
+0

बस एकदम सही है। धन्यवाद! –

+0

महान उत्तर के लिए धन्यवाद, इससे बहुत मदद मिली। एक छोटी टिप्पणी, इस पंक्ति पर: 'रीडर आर = इनपुटस्ट्रीम रीडर (सी.ओपेन इनपुटस्ट्रीम()," यूटीएफ -8 "); ', यह केवल मेरे लिए काम करता है अगर मैं इसे इस तरह उपयोग करता हूं:' रीडर आर = नया इनपुटस्ट्रीम रीडर (सी .openInputStream(), "यूटीएफ -8"); फिर से धन्यवाद !!!! –