GUI olmadan Qt'de çok basit bir metin işleme uygulaması yazmaya başladım. Metnim özel karakterler içeriyordu, ancak bir şekilde, ne yaptığım önemli değil, bu özel karakterleri basamıyorum. Daha sonra fark ettim ki, QCoreApplication
örneğini ekledikten sonra (daha önce çıkarmış olduğum için ihtiyacım olmadı diye düşündüm), her şey gerektiği gibi çalıştı.QCoreApplication başlatılmadığında, QString neden özel karakterleri doğru şekilde uygulamıyor?
#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;
}
Çıktı QCoreApplication
ile (her şey olması gerektiği gibi çalışır): Burada
QCoreApplication
hattı, yorumunu kaldırdıktan sonra
"aää"
"aää"
"aää"
"aää"
"aää"
aää
3
5
Çıkış (özel karakterler değildir (burada gösterilen):
"a"
"a"
"a"
"a"
"a"
a
3
1
Not qPrintabable(s)
numaralı telefonu aradıktan sonra, özel karakterler zaten kaldırılmış. Bunu test ettim, bu QDebug
problem değil. Dosya gerçekten UTF-8 olarak kodlanmış olması durumunda
Ben de kontrol ettim. Hiçbir QCoreApplication
örneği edildiğinde
Neden doğru tedavi özel karakterler QString etmiyor? QCoreApplication
inşa edildiğinde
Yery ilginç bir soru ... Ben neden 'QTextCodec' veya' QTextStream' içinde olabileceğini tahmin ediyorum, ama yanlış olabilir. 'QDebug' bir' QTextStream' kullanır, ancak fark etmiş gibi (.toLocal8Bit(). ConstData() '' sadece bir kısaltmadır) 'qPrintable' zaten sihirli ASCII olmayan karakterleri kaldırır veya ekler' '\ 0', çünkü bu strlen'in 1 döndürmesi gereken tek açıklamadır. – leemes
Diğer karakterleri takip eden "aäa" gibi diğer dizeleri test ettiğimden, '' \ 0 '' ifadesini eklemek mümkün değildir. özel bir karakterden sonra. Onlar kaldırılmaz. Başka bir deyişle, eğer '' 'aaa' 'ise,' QCoreApplication' kullanılmadığında çıktı 'aa' 'dır. – Misch