Russian Qt Forum

Qt => Общие вопросы => Тема начата: andrew.k от Ноябрь 04, 2014, 15:53



Название: в сотый раз о кодировках текста
Отправлено: andrew.k от Ноябрь 04, 2014, 15:53
Вот такой простой пример:

Код
C++ (Qt)
#include <QtCore/QString>
#include <QtGui/QApplication>
#include <QtCore/QtDebug>
#include <QtCore/QTextCodec>
 
int main(int argc, char *argv[])
{
   QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
   qDebug() << QString::fromUtf8("Русский текст 1");
   qDebug() << "Русский текст 2";
 
   QApplication a(argc, argv);
 
   qDebug() << QString::fromUtf8("Русский текст 1");
   qDebug() << "Русский текст 2";
   return 0;
}

Вывод такой:
Код
Bash
andrew@astra13:~/projects/testcode$ ./testcode
"  1"
 2
"Русский текст 1"
Русский текст 2

Почему для корректной работы кодеков требуется создание QApplication(QCoreApplication)?

Да забыл, Qt 4.8.3, Linux


Название: Re: в сотый раз о кодировках текста
Отправлено: andrew.k от Ноябрь 04, 2014, 16:09
Вызов QString::fromUtf8 не делает ничего особенного, по сути вызывает другой метод QUtf8::convertToUnicode (https://qt.gitorious.org/qt/qt/source/0ade09152067324f74678f2de4d447b6e0280600:src/corelib/codecs/qutfcodec.cpp#L156).
В котором не видно зависимости от Q[Core]Appliction.

UPD: Проверил, код этого метода действительно работает по-разному до и после создания экземпляра "апликейшена".
UPD2: Похоже проблема в qDebug(), видимо апликейшн его инициализирует как-то (printf выводит текст корректно).


Название: Re: в сотый раз о кодировках текста
Отправлено: daindygroup от Ноябрь 05, 2014, 07:43


It is very good at it. I feel like I'm reading a lot. It can be used in everyday life, really.


Название: Re: в сотый раз о кодировках текста
Отправлено: gil9red от Ноябрь 05, 2014, 07:45


It is very good at it. I feel like I'm reading a lot. It can be used in everyday life, really.

Ага... в повседневной жизни :D