Pull to refresh

Comments 8

QT — Quick Time
Qt — Create more. Deploy everywhere.
По-моему у Qt внутри был UTF-16, или в последнее время что-то стало меняться?
QString использует UTF-16 (последовательность 16-битных QChar), почему должно что-то меняться? Внутреннее представление строк никакого отношения к тому что написано в посте не имеет же. В большинстве сред/платформ юникод внутри в UTF-16/UCS2/UTF-32.
Автор поменял текст поста, теперь мой вопрос выглядит неуместным. Меня удивило, почему именно 1251 -> UTF-8.
Я исправил текст поста. Спасибо за ваши комментарии!
Я, может, чего-то не понял (не работал с mssql из Qt), но вообще ситуация какая-то странная. Для работы с БД на уровне строк всё должно быть прозрачно (как это прозрачно в ODBC, JDBC и подобном где я сталкивался) в какой бы кодировке реально не хранилось в самой БД. Это должно решаться не далее уровня клиента БД. Это имеет значение, только если читать из строковых полей сырые данные. Тогда да, вы получите байтовое представление значения столбца (строки в нём) в кодировке представления столбца. Но именно это вы и делаете зачем-то (toByteArray как я понимаю).
Вот именно, что должно быть прозрачно.
Для доступа к mysql есть строки подключения по unicode.
Driver={MySQL ODBC 5.2 UNICODE Driver};...

Для Pg
Driver={PostgreSQL UNICODE}

И так далее, но найти строку подключения к MSSQL с юникодом найти не удалось. Народ пытается работать через FreeTDS, но оно под unix. Пишет невероятные преобразования, в php использует iconv. В документации QT написано про Some driver managers and drivers don't support UNICODE.
Это имеет значение, только если читать из строковых полей сырые данные. Тогда да, вы получите байтовое представление значения столбца (строки в нём) в кодировке представления столбца. Но именно это вы и делаете зачем-то (toByteArray как я понимаю).

Мои исследования показали, что если читать toByteArray в Qt 4-й ветке, то там как раз и будут сырые данные. Но в Qt5 это уже не так. Сам в этом убедился и на данной задаче и на задаче с доступом к paradox.
А… ну понятно. Вот я и думаю, что по идее на уровне коннекта должно это определяться. Странно поэтому.
Sign up to leave a comment.

Articles