Вариант решения задачи про преобразованию кодировки windows-1251 в БД к кодировке utf-8 для клиентской программы на QT5.
Есть еще системы, которые используют mssql в кодировке win. К одной такой системе я написал расширение на QT4 и проблему с русскими буквами решил просто: сменой кодировки
Время идет и я по возможности перевожу свои проекты на QT5. Однако, там команды смены кодеков убрали. Все должно быть в utf, что правильно. Да и решение работало не всегда и не на каждой версии ОС win.
Есть еще системы, которые используют 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?
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.
Комментариев нет:
Отправить комментарий