Двигаюсь по своим задачам и столкнулся с проблемой.
Появилась необходимость получить из бд русские символы и отослать их в php по сокету.
Казалось бы всё хорошо и отлично получает, НО вместо вожделенного "Прайм" в php доходит "??N??°????".
Я слышал что бывают запары с кодировкой, но надеялся что инфу не будет перекодировать QT полученную из бд.
Как с этим бороться?
У меня консольное приложение. Вывод в консоль такой-же некорректный, только вместо вопросиков -квадратики
баз в UTF8 а как определить в какой её получаю?
для этого нужно знать КАК ты ее получаешь
QTextCodec *outCodec = QTextCodec::CodecForName("кодировка консоли");
QTextStream out(stdout);
out.setCodec(outCodec);
out << myvar << endl;
QTextCodec *outCodec = QTextCodec::CodecForName("кодировка консоли");
QTextStream out(stdout);
out.setCodec(outCodec);
out << myvar << endl;
QString query="SELECT name FROM `Galaxy` where (`id`='"+QString::number(coord)+"');";
qDebug()<<QTime::currentTime()<<"SL> querry "<<query;
QSqlQuery squery;
if (!squery.exec(query))
{
qDebug()<<QTime::currentTime()<<"SL> query wasn't execute !!! WTF you wrote in SQL sintax?? Oo";
return QString::number(-2);
}
else
{
QSqlRecord rec = squery.record();
if (squery.next())
{
pname=squery.value(rec.indexOf("name")).toString();
qDebug()<<QTime::currentTime()<<"SL> pname "<<pname;
}
else
return QString::number(-1);
}
для начала проверь тип QVariant:
QVariant v = squery.value(rec.indexOf("name"));
if (v.type() == QVariant::ByteArray) {
// print to console
// тут будем раскодировать
} else if (v.type() == QVariant::String) {
// print to console
//
}
QVariant v = squery.value(rec.indexOf("name"));
if (v.type() == QVariant::ByteArray) {
// print to console
// тут будем раскодировать
} else if (v.type() == QVariant::String) {
// print to console
//
}
значит QVariant хранит QByteArray, там где // тут будем раскодировать напиши:
QByteArray bytes = v.toByteArray();
QString result = QString::fromUtf8(bytes.constData(), bytes.size());
теперь в result у тебя валидная строка и ее можно вывести в консоль или куда тебе угодно
см.:
QString::toAscii ()
QString::toLocal8Bit ()
У тебя какая ОСь и язык ОСи(локаль)? Какая кодировка консоли?
Ось win 7 starter но прога планируется будет работать под убунтой.
Язык оси вроде русский, с кодировкой консоли разобраться не могу), только знаю, что её не трогал)
Супер) помогло)
а как ты в пхп передаешь? он ведь тоже принимает какую то свою кодировку, которая где то в конфиге прописывается...
Через сокеты, передаю) Но факт в том, что сейчас у меня заработало)
$out = socket_read($socket, 2048);
сейчас все работает потому что кодировка ОСи и ПХП совпадают, на убунте могут быть баги, так же как и на какой то Французкой винде... но ладно, не буду больше тебя доставать вопросами)
вот только посоветую почитать http://www.joelonsoftware.com/articles/Unicode.html про все эти кодировки и юникод
статью, кстати, было бы неплохо перевести на русский(если еще не перевели)
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)