Russian Qt Forum

Qt => Базы данных => Тема начата: cya-st от Сентябрь 28, 2009, 11:37



Название: Кодировка Postgre
Отправлено: cya-st от Сентябрь 28, 2009, 11:37
Здравствуйте.
Я создал базу PostgreSQL в кодировке WIN1251, из программы я выполняю запрос:
Код
C++ (Qt)
query.exec("INSERT INTO Db1 (id, Name1) VALUES (1,'ТОВАР');");
 
возвращается ошибка: character 0xc322 of encoding "UTF8" has no equivalent in "WIN1251".
Подскажите пожалуйста как с этим можно справится.


Название: Re: Кодировка Postgre
Отправлено: BaltikS от Сентябрь 28, 2009, 12:01
query.exec("INSERT INTO Db1 (id, Name1) VALUES (1,'"+tr("Товар")+"');
При условии что кодировка в программы в 1251 и QTextCodec::codecForTr(QTextCodec::codecForName("CP1251"));


Название: Re: Кодировка Postgre
Отправлено: cya-st от Сентябрь 28, 2009, 12:12
Кодировка программы в UTF8, не хотелось бы всю прогу перекодировать.


Название: Re: Кодировка Postgre
Отправлено: BaltikS от Сентябрь 28, 2009, 14:16
А в чём проблема? Переведи слово ТОВАР в UTF8.


Название: Re: Кодировка Postgre
Отправлено: cya-st от Сентябрь 28, 2009, 15:25
Я перевел весь файл в Notepad++, но ошибка таже.


Название: Re: Кодировка Postgre
Отправлено: BaltikS от Сентябрь 28, 2009, 16:03
Тут очевидно проблема с кодировкой, но это никак не связано с БД. Символ передаваемый Вами в БД не в нужной кодировке. Почитайте по QTextCodec...


Название: Re: Кодировка Postgre
Отправлено: cya-st от Сентябрь 28, 2009, 20:46
Разобрался с этой проблемой:
Код
C++ (Qt)
QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
QString str1 = codec->toUnicode("ТОВАР");
 
Все заработало.