![]() |
|
![]() ![]() ![]() |
|
VirLena |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 21.5.2007 Где: Украина Репутация: нет Всего: нет |
У меня в приложении несколько QLineEdit в которые вводится текст на русском языке. Я беру введенные данные и пересохраняю в базу данных, где все введенные данные почему-то отображаются в виде "????". Программирую в Qt под Linux недавно, потому недопонимаю что не так делаю.
Я считала, что данные вводятся в utf8 при русской раскладке клавиатуры, потому делала так
где Name - QLineEdit *Name, а tmp затем помещается в базу данных через QMYSQL, но видимо ошиблась. Вообщем ничего не получается. За помощь буду благодарна )). |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 7 Всего: 162 |
не коррелирует, не находишь? может, всё-таки UTF-8? |
|||
|
||||
VirLena |
|
||||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 21.5.2007 Где: Украина Репутация: нет Всего: нет |
Вообщем поскольку до меня не доходит попытаюсь обьяснить пошагово, может мне тоже кто-нить ответит также подробно.
В linux в kde я выбираю русскую раскладку клавиатуры, и ввожу текст на русском языке, считая что мое приложение получает этот текст в кодировке utf8, затем с помощью
перевожу из utf8 в koi8-R и в таком виде отправляю в базу данных, при считывании из базы данных я делаю обратное преобразование из koi8-r в utf8, но получаю абракадабру, да и просто при просмотре базы данных я вижу, что все записи кодированы. Я знаю, что что-то делаю не так, я не пойму что именно. Как мне в приложении сделать поддержку ввода русского текста, потому что если данные вводить латиницей никаких проблем не возникает. Еще в книге я прочитала:
Значит ли это, что моя программа должна содержать еще какие-то дополнительные библиотеки, или это не относится к моему вопросу? |
||||
|
|||||
Elfebet |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 545 Регистрация: 15.5.2006 Где: Украина. Запорожь е. Репутация: 5 Всего: 14 |
Не надо переводить вдругую кодировку, попробуй без перевода.
Обычно БД всегда хранит данные в utf8. этот перевод лишний. оно? это не в тему, к вопросу оно не относится. Это сообщение отредактировал(а) Elfebet - 30.5.2008, 09:16 -------------------- Программист не должен всё знать... он должен знать где можно посмотреть |
|||
|
||||
VirLena |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 21.5.2007 Где: Украина Репутация: нет Всего: нет |
Я пробывала и без перевода, параллельно с сохранением в базу данных вывожу текст на экран, на экран выводит нормально, в базе вся инфа кодирована.
Кстати, если я в базу данных ввожу информацию через командную строку MySql на русском, все данные корректны, и если я потом вывожу их на экран своего приложения мне приходиться делать преобразование koi8 в utf8 иначе ничего не получается, поэтому я и подумала, что необходима перекодировка при вводе из приложения в базу данных. |
|||
|
||||
SABROG |
|
||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Смотри. Вот есть исходник, он сохранен в кодировке cp1251. У тебя может быть Koi8-R, если компилятор поймет (например mingw'шный gcc не понимает двубайтовых и более кодировок):
В поле будут иероглифы, т.к. Qt думает, что текст в Utf-8. При этом если я буду вводить русский текст непосредственно в поле и раскладка будет стоять русской, то текст будет виден нормально, это потому, что Qt сам конвертирует вводимый текст в Utf-8. Отсюда имеем - все что вводится вручную в графические компоненты имеет кодировку Utf-8 при попытке считать данные. Насчет mysql. Помимо кодировки базы данных, есть еще кодировка клиента. Например консольный клиент windows, который идет в стандартной поставке mysql может показывать и вставлять текст в кодировке cp866, а в другой версии windows для консоли может стоять unicode. Поэтому на разных машинах данные из одной базы могут отображаться разными иероглифами. Что следует сделать: 1. Выставить кодировку для базы данных в Utf-8 2. Для теста дать команду "SET NAMES utf8;", чтобы MySQL сервер начал считать, что данные (INSERT) и результат (SELECT) приходят и выводятся в Utf-8 кодировке (не смотря на установленную кодировку базы данных). Но по умолчанию вставляемые данные должны интерпретироваться как Utf-8, а принимаемые/выводимые в зависимости от той кодировке, что ты установила для базы данных. Т.е. ты в праве сказать MySQL серверу, что я буду передавать данные в Koi-8R, но ты их сохрани в Utf-8 кодировке в базу. Естественно, что в этом нет смысла, поэтому надо удалить:
Это сообщение отредактировал(а) SABROG - 30.5.2008, 12:35 |
||||
|
|||||
VirLena |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 21.5.2007 Где: Украина Репутация: нет Всего: нет |
спасибо всем за помощь
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, 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. |