Russian Qt Forum

Qt => Общие вопросы => Тема начата: qtkoder777 от Май 06, 2014, 14:27



Название: Проблема с кодировкой и Postgresql
Отправлено: qtkoder777 от Май 06, 2014, 14:27
Здравствуйте. Необходимо выводить на консоль Windows данные из базы Postgresql.
Код
SQL
SHOW client_encoding
выводит UNICODE
В main прописано
Код
C++ (Qt)
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("IBM 866"));
 

Русский текст, прописанный непосредственно в исходниках выводится как надо, а считанный из базы иероглифами.
Вывожу вот так
Код
C++ (Qt)
printf("%s\n",QObject::tr(str).toAscii().data());
Что надо сделать со строкой, чтобы она правильно вывелась?


Название: Re: Проблема с кодировкой и Postgresql
Отправлено: Bepec от Май 06, 2014, 15:16
QTextCodec


Название: Re: Проблема с кодировкой и Postgresql
Отправлено: qtkoder777 от Май 06, 2014, 15:47
QTextCodec
Понимаю, что QTextCodec, а с какими параметрами?
Код
C++ (Qt)
QString str1=QTextCodec::codecForName("UTF-8")->toUnicode(str);
QString str2=QTextCodec::codecForName("KOI8-R")->fromUnicode(str);
Пробовал по-разному и никак не работает.


Название: Re: Проблема с кодировкой и Postgresql
Отправлено: Bepec от Май 06, 2014, 17:11
из ассистента.
Код:
QString string = "...";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QByteArray encodedString = codec->fromUnicode(string);

В вашем случае приходит юникод. Т.е. должно быть примерно так
Код:
QString string = "...";
QTextCodec *codec = QTextCodec::codecForName("windows-1251");
QByteArray encodedString = codec->fromUnicode(string);

За точность не ручаюсь :)