मैंने क्यूटी में एक बहुत ही बुनियादी पाठ मैनिपुलेशन एप्लिकेशन लिखना शुरू किया, बिना जीयूआई के। मेरे पाठ में विशेष वर्ण थे, लेकिन किसी भी तरह से मैं उन विशेष पात्रों को मुद्रित करने में सक्षम नहीं था, इससे कोई फर्क नहीं पड़ता कि मैंने क्या किया। मैंने तब देखा, कि QCoreApplication
उदाहरण जोड़ने के बाद (जिसे मैंने पहले हटा दिया था, क्योंकि मैंने सोचा था कि मुझे इसकी आवश्यकता नहीं होगी), सब कुछ ठीक उसी तरह काम करता था जैसा कि इसे करना चाहिए।क्यूस्ट्रिंग विशेष वर्णों का सही ढंग से इलाज क्यों नहीं करता है, जब कोई क्यूकोर आवेदन तत्काल नहीं किया जाता है?
#include <QCoreApplication>
#include <QString>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString s(QString::fromUtf8("aä\xc3\xa4")); // aää
qDebug() << s;
qDebug() << s.toAscii();
qDebug() << s.toLatin1();
qDebug() << s.toUtf8();
qDebug() << s.toLocal8Bit();
qDebug("%s", qPrintable(s));
qDebug("%i", s.length());
qDebug("%i", strlen(qPrintable(s)));
return 0;
}
QCoreApplication
साथ आउटपुट (सब कुछ एकदम सही ढंग से काम करता है):
यहाँ कोड है लाइन, जहां QCoreApplication
परिभाषित किया गया है बाहर टिप्पणी के बाद
"aää"
"aää"
"aää"
"aää"
"aää"
aää
3
5
आउटपुट (विशेष वर्ण नहीं हैं अब दिखाया गया है):
"a"
"a"
"a"
"a"
"a"
a
3
1
नोट, कि, qPrintabable(s)
पर कॉल करने के बाद ही, विशेष वर्ण पहले से ही हटा दिए गए हैं। मैंने यह सुनिश्चित करने के लिए परीक्षण किया कि QDebug
समस्या नहीं है।
मैंने यह भी जांच की कि फ़ाइल वास्तव में यूटीएफ -8 में एन्कोड की गई है या नहीं।
क्यूस्ट्रिंग विशेष वर्णों का सही ढंग से इलाज क्यों नहीं करता है, जब कोई QCoreApplication
तत्काल नहीं किया गया है?
यरी दिलचस्प सवाल ... मुझे लगता है कि कारण 'QTextCodec' या 'QTextStream' के भीतर हो सकता है, लेकिन मैं गलत हो सकता हूं। 'QDebug' एक 'QTextStream' का उपयोग करता है, लेकिन जैसा कि आपने देखा है,' qPrintable' (जो '.toLocal8Bit()। ConstData()' के लिए केवल एक शॉर्टेंड है) पहले से ही जादुई रूप से आपके गैर-असीसी वर्ण हटा देता है, या' '\ 0'', चूंकि यह एकमात्र स्पष्टीकरण है कि क्यों' strlen' वापस आना चाहिए 1. – leemes
'' 0'' डालने का मामला नहीं है, क्योंकि मैंने अन्य तारों का परीक्षण '' '' के रूप में किया है, जहां अन्य अक्षरों का पालन किया जाता है एक विशेष चरित्र के बाद। वे हटाए नहीं गए हैं। दूसरे शब्दों में, यदि '' '' ''' '' '' है, तो 'QCoreAplication' का उपयोग न करने पर आउटपुट' "aa" 'है। – Misch