кодировка
От: Аноним  
Дата: 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
чего не так не пойму, и что с этим делать дальше
Re: кодировка
От: Аноним  
Дата: 15.07.12 11:27
Оценка:
да забыла написать еще вызывается
setCodecForCStrings(codecKOI);

все равно не помогает
Re: кодировка
От: sheep2k Россия  
Дата: 15.07.12 12:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>ничего не помогает, локаль UTF-8, но файл, в который перенаправляется ст.вывод смотрю в кодировке KOI8-R

А>чего не так не пойму, и что с этим делать дальше


qDebug() << codecKOI->toUnicode(query.value(0).toByteArray());
Re[2]: кодировка
От: sheep2k Россия  
Дата: 15.07.12 12:31
Оценка:
Здравствуйте, sheep2k, Вы писали:

S>Здравствуйте, Аноним, Вы писали:


А>>ничего не помогает, локаль UTF-8, но файл, в который перенаправляется ст.вывод смотрю в кодировке KOI8-R

А>>чего не так не пойму, и что с этим делать дальше


S>
S>qDebug() << codecKOI->toUnicode(query.value(0).toByteArray());
S>


Ещё забыл


codecKOI = QTextCodec::codecForName("KOI8-R");
Re: кодировка
От: Centaur Россия  
Дата: 16.07.12 13:14
Оценка: +1 -1
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте! уже несколько часов бьюсь с кодировкой. помогите пжлста.

А>есть база sqlite с кодировкой KOI8-R

Ваша проблема вот здесь.

А>чего не так не пойму, и что с этим делать дальше


Базу сдампить, отконвертировать в UTF-8 и работать нормально. Про KOI8-R, Windows-1251 и EBCDIC забыть, навсегда, как страшный сон.
Re[2]: кодировка
От: Аноним  
Дата: 17.07.12 09:29
Оценка:
Здравствуйте, Centaur, Вы писали:

C>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте! уже несколько часов бьюсь с кодировкой. помогите пжлста.

А>>есть база sqlite с кодировкой KOI8-R

C>Ваша проблема вот здесь.


А>>чего не так не пойму, и что с этим делать дальше


C>Базу сдампить, отконвертировать в UTF-8 и работать нормально. Про KOI8-R, Windows-1251 и EBCDIC забыть, навсегда, как страшный сон.


к сожалению, такой вариант не приемлем
Re: кодировка
От: profsha  
Дата: 18.07.12 12:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте! уже несколько часов бьюсь с кодировкой. помогите пжлста.

А>есть база sqlite с кодировкой KOI8-R

А>
А>QSqlQuery query = db.exec("select name from table");
А>while(query.next())
А>{
А>   qDebug() << query.value(0).toByteArray();
А>}
А>


можно попробовать так:

QString str = query.value(0).toString();
QTextStream in(&str);
in.setCodec("KOI8-R");
qDebug()<<in.readAll();
Re[2]: кодировка
От: Аноним  
Дата: 20.07.12 04:28
Оценка:
Здравствуйте, profsha, Вы писали:

P>можно попробовать так:


P>
P>QString str = query.value(0).toString();
P>QTextStream in(&str);
P>in.setCodec("KOI8-R");
P>qDebug()<<in.readAll();
P>



спасибо, но не помогло. Такое впечатление, что дело в qt-шном драйвере sqlite
Re[3]: кодировка
От: sheep2k Россия  
Дата: 21.07.12 09:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>спасибо, но не помогло. Такое впечатление, что дело в qt-шном драйвере sqlite


Я же написал как надо сделать, не пробовали что-ли?

  QFile f("c:/tmp/test.koi8");
  if (f.open(QIODevice::ReadOnly))
  {
    QByteArray ba = f.readAll();
    QTextCodec* codec = QTextCodec::codecForName("KOI8-R");
    if (codec)
      qDebug() << codec->toUnicode(ba);
  }


Подобный этому код гарантировано работает уже много лет в куче проектов. Если не работает, значит кодировка не KOI8.
Re: кодировка
От: tasiziso  
Дата: 31.08.12 16:09
Оценка:
Здравствуйте, <Аноним>, Вы писали:


А>выводятся одни вопросики


Это означает, что произошла 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

А>чего не так не пойму, и что с этим делать дальше

Смотрите сверху — важно избежать конверсии с потерями.
... << RSDN@Home 1.2.0 alpha 5 rev. 1526>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.