Есть еще системы, которые используют mssql в кодировке win. К одной такой системе я написал расширение на QT4 и проблему с русскими буквами решил просто: сменой кодировки
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251")); QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251")); QTextCodec::setCodecForLocale(QTextCodec::codecForName("Windows-1251"));
Время идет и я по возможности перевожу свои проекты на QT5. Однако, там команды смены кодеков убрали. Все должно быть в utf, что правильно. Да и решение работало не всегда и не на каждой версии ОС win.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
В своей программе я напрямую не отображаю результат 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"); //беру содержимое поля как массив байт и преобразовываю его к UTF-8. дальше его можно использовать в QT ... = codec->toUnicode(queryl->value( 0 ).toByteArray());
Интересно, что если поле не преобразовывать к varbinary
, то метод .toByteArray()
выдаст уже испорченные данные.
А может кто-то знает строку подключения для UTF-8?
ссылка на оригинал статьи http://habrahabr.ru/post/234089/
Добавить комментарий