![]() |
|
![]() ![]() ![]() |
|
Maka6er |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 27.2.2007 Где: Киев Репутация: нет Всего: 3 |
Есть БД sqlite. При вставке или извлечении текста на украинском языке возникают проблемы с кодировкой. Пробовал:
Как решить данную проблему? |
|||
|
||||
anatox91 |
|
|||
![]() программист-самоучка ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: нет Всего: 13 |
тут что-то подобное
-------------------- The code is the design © Sony VAIO VGN-FW480J ![]() |
|||
|
||||
Maka6er |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 27.2.2007 Где: Киев Репутация: нет Всего: 3 |
Смотрел, но непомогло. Там база mysql. То решение как я понял:
1. Выставить кодировку для базы данных в Utf-8 2. Для теста дать команду "SET NAMES utf8;" В sqlite "SET NAMES utf8;" не работает. А как выставить кодировку не знаю. Это сообщение отредактировал(а) Maka6er - 3.6.2008, 19:59 |
|||
|
||||
Elfebet |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 545 Регистрация: 15.5.2006 Где: Украина. Запорожь е. Репутация: 5 Всего: 14 |
в указаном anatox91, топике написано, что кодировку можно не менять, в QT и SqlLite изначально работает с кодировкой Utf-8.
в твоем коде написано что ты тексту присвоил кодировку KOI8-U и записал в базу, а в базе кодировка стоит Utf-8, по этому и кракозяблики. p.s. порыл в интернете, как поменять кодировку в Sqlite - не нашел :( -------------------- Программист не должен всё знать... он должен знать где можно посмотреть |
|||
|
||||
Maka6er |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 27.2.2007 Где: Киев Репутация: нет Всего: 3 |
Спасибо за ответы. Проблема решилась. Программа для администрирования sqlite работала с непонятной кодировкой. Делаю просто fromLocal8Bit() и в моей проге все работает.
|
|||
|
||||
SABROG |
|
||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Она не меняется, задается один раз при создании базы. Перед созданием базы можно дать команду:
В Qt используюется функция sqlite3_open16() для создания базы, а это автоматически устанавливает кодировку UTF-16 для каждой новой базы данных. Если надо поменять кодировку базы, то можно дать команду "PRAGMA encoding = "UTF-8";" сразу после вызова QSqlDatabase.open(), но я бы лишний раз подумал, а надо ли это делать. Почему объясню ниже. Если текст на украинском языке и вводится в графические компоненты Qt, то он уже в Unicode 4.0 (я ошибался, когда говорил, что он в Utf-8, это всего-лишь одно из представлений Unicode) кодировке и его можно вставлять в базу, извлекать и отображать в Qt приложении без проблем. Qt конвертит QString в представление Utf-16 и передает в SQLITE через функцию sqlite3_bind_text16. Если база в Utf-8 кодировке, то SQLITE сам конвертит переданный текст в Utf-16 в Utf-8. Кстати это может быть одним из узких мест в драйвере Qt для работы с базой sqlite, поэтому может быть есть смысл все-таки использовать кодировку Utf-16, не смотря на то, что размер базы может увеличиться в 2 раза. Ну или не использовать Qtшный sql драйвер, а работать с sqlite напрямую. Если текст берется из текстового файла или из другого источника, то его нужно предварительно перевести в unicode, только в этом случае нам нужна функция QTextCodec::codecForName() и QTextCode::toUnicode(). |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |