Здравствуйте, Аноним, Вы писали:
А>Здравствуйте! уже несколько часов бьюсь с кодировкой. помогите пжлста. А>есть база sqlite с кодировкой KOI8-R
Ваша проблема вот здесь.
А>чего не так не пойму, и что с этим делать дальше
Базу сдампить, отконвертировать в UTF-8 и работать нормально. Про KOI8-R, Windows-1251 и EBCDIC забыть, навсегда, как страшный сон.
кодировка
От:
Аноним
Дата:
15.07.12 11:08
Оценка:
Здравствуйте! уже несколько часов бьюсь с кодировкой. помогите пжлста.
есть база sqlite с кодировкой KOI8-R
QSqlQuery query = db.exec("select name from table");
while(query.next())
{
qDebug() << query.value(0).toByteArray();
}
выводятся одни вопросики
пробовала так
QTextCodec *codecKOI;
codecKOI = QTextCodec::setCodecForName("KOI8-R");
QSqlQuery query = db.exec("select name from table");
while(query.next())
{
qDebug() << codecKOI->fromUnicode(query.value(0).toByteArray());
}
ничего не помогает, локаль UTF-8, но файл, в который перенаправляется ст.вывод смотрю в кодировке KOI8-R
чего не так не пойму, и что с этим делать дальше
Здравствуйте, Аноним, Вы писали:
А>ничего не помогает, локаль UTF-8, но файл, в который перенаправляется ст.вывод смотрю в кодировке KOI8-R А>чего не так не пойму, и что с этим делать дальше
Здравствуйте, sheep2k, Вы писали:
S>Здравствуйте, Аноним, Вы писали:
А>>ничего не помогает, локаль UTF-8, но файл, в который перенаправляется ст.вывод смотрю в кодировке KOI8-R А>>чего не так не пойму, и что с этим делать дальше
Здравствуйте, Centaur, Вы писали:
C>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте! уже несколько часов бьюсь с кодировкой. помогите пжлста. А>>есть база sqlite с кодировкой KOI8-R
C>Ваша проблема вот здесь.
А>>чего не так не пойму, и что с этим делать дальше
C>Базу сдампить, отконвертировать в UTF-8 и работать нормально. Про KOI8-R, Windows-1251 и EBCDIC забыть, навсегда, как страшный сон.
Это означает, что произошла lossy conversion — кои, локалезависимая кодировка, чтобы ее увидеть через query.value(0).toByteArray();
нужно ее установить в системе. Попробуйте ее выставить системной и вызовите query.value(0).toByteArray(); чтобы убедиться что это таки кои.
А>
А>QTextCodec *codecKOI;
А>codecKOI = QTextCodec::setCodecForName("KOI8-R");
А>QSqlQuery query = db.exec("select name from table");
А>while(query.next())
А>{
А> qDebug() << codecKOI->fromUnicode(query.value(0).toByteArray());
А>}
А>
Сдесь грубая ошибка — вы данные преобразовываете в локалезвисимый текст с помощью query.value(0).toByteArray(); и этот же кусок памяти пытаетесь сконвертировать, указывая чтооно таки юникод, аименно UTF16
А>ничего не помогает, локаль UTF-8, но файл, в который перенаправляется ст.вывод смотрю в кодировке KOI8-R А>чего не так не пойму, и что с этим делать дальше
Смотрите сверху — важно избежать конверсии с потерями.