2010-11-25 5 views
8

युक्त वेरिएबल से यूनिकोड बनाएं, मेरे पास राष्ट्रीय पात्रों (आईएसओ -885 9 -2) वाले डेटा वाले QPlainTextEdit फ़ील्ड हैं।क्यूस्ट्रिंग

tmp = self.ui.field.toPlainText() (QString type) 

जब मैं कार्य करें:

tmp = unicode(tmp, 'iso-8859-2') 

मैं राष्ट्रीय पात्रों के बजाय प्रश्न चिह्न मिलता है। मैं QPlainTextEdit फ़ील्ड में डेटा को यूनिकोड में ठीक से कैसे परिवर्तित कर सकता हूं?

+0

AFAIK 'QString' UTF-16 का उपयोग करता है, तो आपको लगता है कि कोशिश कर सकते हैं। – Philipp

+0

संकेत के लिए धन्यवाद - मैं बाद में कोशिश करूंगा और प्रतिक्रिया दूंगा। Modyfing पोस्ट के लिए बीटीडब्ल्यू thx। – rapid

उत्तर

3

जैसा कि कहा गया था QPlainTextEdit.toPlainText() QString देता है जो यूटीएफ -16 होना चाहिए, जबकि यूनिकोड() कन्स्ट्रक्टर बाइट स्ट्रिंग की अपेक्षा करता है। नीचे एक छोटा सा उदाहरण है:

field.toPlainText: परीक्षण OA это китайский: 最主要 的

UTF-16: परीक्षण OA это китайский

tmp = self.field.toPlainText() 
print 'field.toPlainText: ', tmp 

codec0 = QtCore.QTextCodec.codecForName("UTF-16"); 
codec1 = QtCore.QTextCodec.codecForName("ISO 8859-2"); 

print 'UTF-16: ', unicode(codec0.fromUnicode(tmp), 'UTF-16') 
print 'ISO 8859-2: ', unicode(codec1.fromUnicode(tmp), 'ISO 8859-2') 

इस कोड को आउटपुट निम्नलिखित का उत्पादन : 最主要 的

आईएसओ 8859-2: परीक्षण ÖÄ ??? ?????????: ????

आशा है कि यह मदद करता है, का संबंध

+0

ठीक काम करता है। लेकिन मुझे एक अतिरिक्त सवाल है - आइए मान लें कि टीएमपी वैरिएबल (आईएसओ 885 9 -2) को एन्कोडेड फॉर्म में भेजा जाना है। क्या बी 64 एनकोड (टीएमपी) और बाद में बी 64 डीकोड (टीएमपी) राष्ट्रीय पात्रों के साथ ठीक से काम करेगा? मेरे लिए बहुत सारे एन्कोडिंग/डिकोडिंग लगता है लेकिन मुझे इसकी ज़रूरत है और यह हमेशा दर्दनाक अनुभव था। – rapid

+0

हम्म .. यदि आपके द्वारा काम कर रहे प्रोटोकॉल \ मीडिया को बनावट डेटा से निपटने के लिए डिज़ाइन किया गया है जिसे आपको बेस 64 एन्कोडिंग का उपयोग करने की आवश्यकता है। मुझे नहीं लगता कि वहां कोई अन्य तरीका संभव है –