crossplatform.ru

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

> Paradox, Qt и кодировка, проблема с русскоязычным текстом в БД
AD
  опции профиля:
сообщение 14.12.2010, 14:45
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Проблема с русскоязычным текстом при вставке в БД. В приложении сделано так:
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 не работет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
panter_dsd
  опции профиля:
сообщение 14.12.2010, 14:51
Сообщение #2


Жаждущий знаний
***

Группа: Участник
Сообщений: 254
Регистрация: 1.1.2009
Из: Санкт-Петербург
Пользователь №: 474

Спасибо сказали: 32 раз(а)




Репутация:   3  


Используй QTextStream и устанавливай кодек ему.

Сообщение отредактировал panter_dsd - 14.12.2010, 14:52
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 14.12.2010, 14:53
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(panter_dsd @ 14.12.2010, 14:51) *
1. Следи за скобками QString line(out.readLine()),
2. Используй QTextStream и устанавливай кодек ему.

1) Не понял. Что не так?
2) QTextStream я и использую. out - данного типа. Какой именно ему кодек устанавливать надо? После чтения строки в дебаге я вижу русский текст.

Сообщение отредактировал AD - 14.12.2010, 14:54
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 9.11.2024, 1:44