crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Paradox, Qt и кодировка
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
AD Дата 14.12.2010, 16:23
 
Цитата(Rocky @ 14.12.2010, 15:40) *
А может записи в самой БД хранятся в другой кодировке?

Думаю, что это понятно из-за самой проблемы.

Цитата(Rocky @ 14.12.2010, 15:40) *
А сам файл текстовый считывается нормально? В дебаге смотрел на значения?

Уже говорил! :) ;) Нормально считывается и в дебаге видел русский текст.


Решение получилось. Итак:
1) При чтении файла ставлю кодировку Latin1
    query.prepare("insert into AztLayerName(Id, [Number], Name) values(?, ?, ?)");
    while(!out.atEnd())
    {
        QString line(out.readLine()), left_line(line.section(QChar(' '), 0, 0).simplified()),
                right_line(line.section(QChar(' '), 1, line.size()).simplified());
        query.bindValue(0, id);
        query.bindValue(1, left_line.toInt());
        query.bindValue(2, right_line);
        bool is_ins = query.exec();
        ++id;
    }

При чтении из БД с выбранной строчкой выполняю функцию класса QString toLatin1():
return record(index.row()).value("Name").toString().toLatin1();
Rocky Дата 14.12.2010, 15:40
  А может записи в самой БД хранятся в другой кодировке?

----
UPD
А сам файл текстовый считывается нормально? В дебаге смотрел на значения?
AD Дата 14.12.2010, 15:33
 
Цитата(panter_dsd @ 14.12.2010, 15:10) *
Скорее всего это уже к Кьюту отношения не имеет. Посмотри тут тыц

А что именно может помочь? Испробовал несколько вещей. Не помогает.
panter_dsd Дата 14.12.2010, 15:10
  Скорее всего это уже к Кьюту отношения не имеет. Посмотри тут тыц
AD Дата 14.12.2010, 15:03
 
Цитата(panter_dsd @ 14.12.2010, 14:56) *
1. Да сразу не заметил, что ты определяешь 3 QString. ИМХО, правильнее писать
QString line(out.readLine());
QString left_line(line.section(QChar(' '), 0, 0).simplified());
QString right_line(line.section(QChar(' '), 1, line.size()).simplified());

2.
QTextStream stream (&file);
stream.setCodec ("CP1251");

1) Ладно. На счет первого спорить не буду. Считаю, что если можно сделать за 1 шаг, пусть делает за один, чем за три.
2) Так у меня QTextStream итак выводит в русскоязычном варианте. Зачем еще раз определять для него? Попробую конечно, но не думаю, что поможет.

2) Не помогло.
panter_dsd Дата 14.12.2010, 14:56
  1. Да сразу не заметил, что ты определяешь 3 QString. ИМХО, правильнее писать
QString line(out.readLine());
QString left_line(line.section(QChar(' '), 0, 0).simplified());
QString right_line(line.section(QChar(' '), 1, line.size()).simplified());

2.
QTextStream stream (&file);
stream.setCodec ("CP1251");
AD Дата 14.12.2010, 14:53
 
Цитата(panter_dsd @ 14.12.2010, 14:51) *
1. Следи за скобками QString line(out.readLine()),
2. Используй QTextStream и устанавливай кодек ему.

1) Не понял. Что не так?
2) QTextStream я и использую. out - данного типа. Какой именно ему кодек устанавливать надо? После чтения строки в дебаге я вижу русский текст.
panter_dsd Дата 14.12.2010, 14:51
  Используй QTextStream и устанавливай кодек ему.
AD Дата 14.12.2010, 14:45
  Проблема с русскоязычным текстом при вставке в БД. В приложении сделано так:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("Windows-1251"));    ///< установка Windows-1251
    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());                ///< для внутреннего преобразования
    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());                    ///< для функций перевода tr()
в функции main().

Затем... Есть текстовый файл следующего содержания:
Цитата
111000001 Астрономический пункт
112000001 Пункт государственной геодезической сети (ГГС)
113100001 Точка съемочной сети, закрепленная на местности центром
113200001 Точка съемочной сети, не закрепленная на местности центром
114100001 Нивелирный репер, марка
114200002 Нивелирный ход
115100002 ЛИНИИ МЕРИДИАНОВ
115110002 ВЫХОДЫ ЛИНИЙ МЕРИДИАНОВ
116100002 ЛИНИИ ПАРАЛЛЕЛЕЙ
116110002 ВЫХОДЫ ЛИНИЙ ПАРАЛЛЕЛЕЙ
117100002 ВЕРТ.ЛИНИИ ПРЯМОУГОЛЬНОЙ СЕТКИ
117200002 ГОРИЗ.ЛИНИИ ПРЯМОУГОЛЬНОЙ СЕТКИ
117300002 ВЫХОДЫ ВЕРТ.ЛИНИЙ СМЕЖНОЙ ЗОНЫ
117400002 ВЫХОДЫ ГОРИЗ.ЛИНИЙ СМЕЖНОЙ ЗОНЫ
117500002 ВЕРТИК.ЛИН.ПЕРЕСЕЧ.КООРД.ЛИН.
117600002 ГОРИЗ.ЛИН.ПЕРЕСЕЧ.КООРД.ЛИН.

Ну и там намного больше таких описаний.
При чтении файла делаю следующее:
QSqlQuery query(db);
    query.prepare("insert into [AztLayerName]([Id], [Number], [Name]) values(:Id, :Number, :Name)");
    while(!out.atEnd())
    {
        QString line(out.readLine()), left_line(line.section(QChar(' '), 0, 0).simplified()),
                right_line(line.section(QChar(' '), 1, line.size()).simplified());
        query.bindValue(QString(":Id"), id);
        query.bindValue(QString(":Number"), left_line.toInt());
        query.bindValue(QString(":Name"), right_line);
        bool is_ins = query.exec();
        ++id;
    }

Так проблема в том, что в БД вместо строки вставляются знаки вопроса. Где и как изменить кодировку? На форуме перед тем, как задать вопрос - порылся. Ответы есть для MySql! Для Paradox строка set character set latin1 не работет.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 9.12.2022, 15:29