2012-08-24 12 views
6

मेरे पास एक ब्लैकबेरी प्रोजेक्ट है जिस पर मैं काम कर रहा हूं और मुझे यूटीएफ -16LE (थोड़ा एंडियन) का उपयोग करके एन्कोड किए गए स्ट्रिंग्स के बाइट एरे को कन्वर्ट करने की आवश्यकता है जिसमें स्ट्रिंग के बाइट सरणी में यूटीएफ -16 बीई (बड़ा एंडियन) एन्कोडिंग, और वी। विपरीत। एक सर्वर जो मैं कनेक्ट कर रहा हूं वह यूटीएफ -16LE एन्कोडिंग में स्ट्रिंग के ब्लैकबेरी डिवाइस बाइट एरे भेज रहा है, हालांकि डिवाइस यूटीएफ -16LE का मूल रूप से समर्थन नहीं करता है। जब मैं बाइट एरे को तारों में वापस डीकोड करने का प्रयास करता हूं, तो स्ट्रिंग्स गैरकानूनी होते हैं। डिवाइस, हालांकि, यूटीएफ -16 बीई का समर्थन करता है। मुझे इस प्रक्रिया को उलट करने की भी आवश्यकता है, यानी यूटीएफ -16 बीई एन्कोडिंग के साथ एक स्ट्रिंग के बाइट सरणी को सर्वर की अपेक्षा (यूटीएफ -16LE) में परिवर्तित करें। धन्यवाद।UTF-16BE UTF-16LE, और वापस

मैं डिवाइस पर ऐसा नहीं कर सकते हैं:

String test = "test"; 
byte[] testBytes = test.getBytes("UTF-16LE");// throws UnsupportedEncodingException 

मैं ऐसा कर सकते हैं:

String test = "test"; 
byte[] testBytes = test.getBytes("UTF-16BE");//works 
+0

यदि आप केवल 'बाइट [] testBytes = test.getBytes ("UTF-16") का उपयोग करते हैं तो आप क्या प्राप्त करते हैं? क्या आपका सर्वर स्ट्रिंग की शुरुआत में उचित बीओएम चरित्र डालता है और ब्लैकबेरी स्वचालित रूप से बड़े एंडियन का पता लगाता है? – HeatfanJohn

+0

@HatfanJohn test.getBytes ("UTF-16") एक अपवाद भी फेंकता है। मुझे यकीन नहीं है कि सर्वर स्ट्रिंग की शुरुआत में बीओएम रखता है या नहीं। यह एक एएसपी.NET एडीएफएस सर्वर है (अगर यह मदद करता है)। ब्लैकबेरी स्वतः पता नहीं लगाता है। धन्यवाद। – RyanM

उत्तर

11

UTF-16 Codeunit प्रति दो बाइट्स का उपयोग करता है, का उपयोग कर इनकोडिंग कुछ यूनिकोड कोड पॉइंट्स के साथ एक कोडुनिट और अन्य कोडपॉइंट्स दो कोडुनिट्स (जिसे सरोगेट जोड़ी कहा जाता है) का उपयोग कर।

यूटीएफ -16LE और यूटीएफ -16 बीई के बीच कनवर्ट करने के लिए, प्रत्येक कोडुनिट की प्रत्येक 2-बाइट जोड़ी के क्रम को स्वैप करने वाले बाइट्स के माध्यम से बस लूप करें। सरोगेट कोडुनिट्स का क्रम LE और BE के बीच नहीं बदलता है। IOW, बस एक दूसरे के साथ बाइट 0 और 1 स्वैप करें, एक दूसरे के साथ बाइट 2 और 3 स्वैप करें, और इसी तरह।

+0

मैं देखता हूं। मैं कोशिश करूँगा और वापस रिपोर्ट करूंगा। धन्यवाद! – RyanM

+0

यह काम किया! बहुत धन्यवाद। – RyanM