Небольшой хак по преобразованию кодировки windows-1251 в MSSQL в Unicode для Qt5.
Есть еще системы, которые используют mssql в кодировке win. К одной такой системе я написал расширение на Qt4 и проблему с русскими буквами решил просто: сменой кодировки
Время идет и я по возможности перевожу свои проекты на Qt5. Однако, там команды смены кодеков убрали. Все должно быть в Unicode, что правильно. Да и решение работало не всегда и не на каждой версии ОС win.
В своей программе я напрямую не отображаю результат SQL запроса в модель, поэтому проблему решил пока так:
Интересно, что если поле не преобразовывать к
А может кто-то знает строку подключения для данных в Unicode?
Есть еще системы, которые используют mssql в кодировке win. К одной такой системе я написал расширение на Qt4 и проблему с русскими буквами решил просто: сменой кодировки
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251")); QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251")); QTextCodec::setCodecForLocale(QTextCodec::codecForName("Windows-1251"));
Время идет и я по возможности перевожу свои проекты на Qt5. Однако, там команды смены кодеков убрали. Все должно быть в Unicode, что правильно. Да и решение работало не всегда и не на каждой версии ОС win.
В своей программе я напрямую не отображаю результат SQL запроса в модель, поэтому проблему решил пока так:
//подключение к бд QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); db.setUserName("<username>"); db.setPassword("<userpass>"); db.setDatabaseName("DRIVER={SQL Server};Server=<servername>;Database=<databasename>;Regional=Yes"); //скорректировал SQL-запрос, в части полей с русскими буквами query->exec( "select cast(<fieldname> as varbinary) from <tablename>"); //кодек для преобразования QTextCodec *codec = QTextCodec::codecForName("Windows-1251"); //беру содержимое поля как массив байт и преобразовываю его к Unicode. Дальше его можно использовать в Qt ... = codec->toUnicode(queryl->value( 0 ).toByteArray());
Интересно, что если поле не преобразовывать к
varbinary, то метод .toByteArray() выдаст уже испорченные данные.А может кто-то знает строку подключения для данных в Unicode?
