2010-08-30 12 views
5

में कनवर्ट करना मेरे पास क्लाइंट-सर्वर एप्लिकेशन है जहां क्लाइंट Qt (उबंटू) में होगा और सर्वर सी # होगा। क्यूटी क्लाइंट यूटीएफ -16 एन्कोडेड प्रारूप में तारों को भेज देगा। मैंने यूटीएफ -16 में कनवर्ट करने के लिए QTextCodec क्लास का उपयोग किया है। लेकिन जब भी रूपांतरण होता है तो इसे कुछ और पात्रों के साथ जोड़ा जाएगा। उदाहरण के लिएक्यूटी - QString को यूनिकोड QByteArray

"< बाँध endpoint = '2_3'/>"

में बदल जायेगा "\ एफएफ \ फ़े < \ 0b \ 0i \ 0n \ 0 d \ 0 \ 0E \ 0n \ 0 डी \ 0 पी \ 0o \ 0i \ 0n \ 0t \ 0 = \ 0 '\ 02 \ 0_ \ 03 \ 0' \ 0/\ 0> \ 0 \ 0 \ 0 "

मेरे पास निम्न कोड है जो परिवर्तित करता है QStyring QByteArray

//'socketMessage' is the QString, listener is the QTcpSocket 
QTextCodec *codec = QTextCodec::codecForName("UTF-16"); 
QByteArray data = codec->fromUnicode(socketMessage); 
listener->write(data); 

मैंने भी कोशिश की है ई क्यूक्स्टस्ट्रीम, क्यूडेटास्ट्रीम आदि एन्कोडिंग के लिए। लेकिन हर बार मैं एक ही परिणाम के साथ खत्म होता है। क्या मुझसे यहां कुछ गलत हो रहा है?

उत्तर

3

शुरुआत में \ ff \ fe यूनिटोड बाइट ऑर्डर मार्क (BOM) यूटीएफ -16, छोटे-एंडियन के लिए है। मुझे यकीन है कि कैसे QTextCodec कि ommit को पाने के लिए नहीं कर रहा हूँ, लेकिन आप इस कोशिश कर सकते आप बीओएम बिना UTF-16 में एक स्ट्रिंग से एक QByteArray प्राप्त करना चाहते हैं:

QString s("12345"); 
QByteArray b((const char*) (s.utf16()), s.size() * 2); 
4

हालांकि सवाल बहुत पहले पूछा जाता है , मुझे भी यही समस्या थी। इसका समाधान QTextCnc :: IgnoreHeader विकल्प के साथ QTextEncoder बनाना है।

QTextCodec *codec = QTextCodec::codecForName("UTF-16"); 
QTextEncoder *encoderWithoutBom = codec->makeEncoder(QTextCodec::IgnoreHeader); 

QString str("Foobar") 
QByteArray bytes = encoderWithoutBom ->fromUnicode(s); 

यह बीओएम के बिना एक QByteArray का परिणाम देगा।

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