| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt] Ввод текстовых данных на русском языке |
| Автор: VirLena 29.5.2008, 16:58 | ||
| У меня в приложении несколько QLineEdit в которые вводится текст на русском языке. Я беру введенные данные и пересохраняю в базу данных, где все введенные данные почему-то отображаются в виде "????". Программирую в Qt под Linux недавно, потому недопонимаю что не так делаю. Я считала, что данные вводятся в utf8 при русской раскладке клавиатуры, потому делала так
где Name - QLineEdit *Name, а tmp затем помещается в базу данных через QMYSQL, но видимо ошиблась. Вообщем ничего не получается. За помощь буду благодарна )). |
| Автор: JackYF 29.5.2008, 17:33 |
не коррелирует, не находишь? может, всё-таки UTF-8? |
| Автор: VirLena 30.5.2008, 08:50 | ||||
| Вообщем поскольку до меня не доходит попытаюсь обьяснить пошагово, может мне тоже кто-нить ответит также подробно. В linux в kde я выбираю русскую раскладку клавиатуры, и ввожу текст на русском языке, считая что мое приложение получает этот текст в кодировке utf8, затем с помощью
перевожу из utf8 в koi8-R и в таком виде отправляю в базу данных, при считывании из базы данных я делаю обратное преобразование из koi8-r в utf8, но получаю абракадабру, да и просто при просмотре базы данных я вижу, что все записи кодированы. Я знаю, что что-то делаю не так, я не пойму что именно. Как мне в приложении сделать поддержку ввода русского текста, потому что если данные вводить латиницей никаких проблем не возникает. Еще в книге я прочитала:
Значит ли это, что моя программа должна содержать еще какие-то дополнительные библиотеки, или это не относится к моему вопросу? |
| Автор: Elfebet 30.5.2008, 09:14 |
| Не надо переводить вдругую кодировку, попробуй без перевода. Обычно БД всегда хранит данные в utf8. этот перевод лишний. оно? это не в тему, к вопросу оно не относится. |
| Автор: VirLena 30.5.2008, 09:21 |
| Я пробывала и без перевода, параллельно с сохранением в базу данных вывожу текст на экран, на экран выводит нормально, в базе вся инфа кодирована. Кстати, если я в базу данных ввожу информацию через командную строку MySql на русском, все данные корректны, и если я потом вывожу их на экран своего приложения мне приходиться делать преобразование koi8 в utf8 иначе ничего не получается, поэтому я и подумала, что необходима перекодировка при вводе из приложения в базу данных. |
| Автор: SABROG 30.5.2008, 12:32 | ||||
Смотри. Вот есть исходник, он сохранен в кодировке 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 кодировке в базу. Естественно, что в этом нет смысла, поэтому надо удалить:
|
| Автор: VirLena 2.6.2008, 12:05 |
| спасибо всем за помощь |