Название: Как получить "русский" char* из QString Отправлено: svictor от Февраль 26, 2006, 16:52 QT 4.1 Привожу фрагмент кода
char *ch; QByteArray qBa; QString *qStr= new QString(QString::fromUtf8("ПРИВЕТ")); qBa = qStr->toAscii(); ch = qBa.data(); В результате одни вопросы (код байта 63). Если текст английский, то все работает. Как сделать, чтобы русский текст тоже работал? Название: Как получить "русский" char* из QString Отправлено: Asaphus_Expansus от Февраль 26, 2006, 18:25 1.
QString *qStr = new QString(QString::fromUtf8("Привет!")); QByteArray qBa = qStr->toLocal8Bit(); 2. Файл исходников сохранять как utf8 Название: Как получить "русский" char* из QString Отправлено: svictor от Февраль 27, 2006, 08:21 Проверил. Теперь на каждый русский байт формируется два байта, а нужно один в досовской кодировке. Просто нужно передать текст по СОМ порту, чтобы его поняла прога, работающая под виндой. С английским нет проблемм, а с русским как обычно ... :)
Название: Как получить "русский" char* из QString Отправлено: Sergeich от Февраль 27, 2006, 10:48 Код: QTextCodec::setCodecForCStrings( QTextCodec::codecForName("utf8") ); Далее res можно использовать как const char* Название: Как получить "русский" char* из QString Отправлено: svictor от Февраль 27, 2006, 13:26 Что-то не хочет получаться :( Говорит что QCSting вообще нету. В Qt Assistant нашел, что fromUnicode возращает QByteArray. Но и он ничего хорошего не выдал.
Название: Как получить "русский" char* из QString Отправлено: Asaphus_Expansus от Февраль 27, 2006, 14:25 Если нужно DOS кодировку то
при сохранении в utf8 QString qStr = QString::fromUtf8("Привет!") при сохранении в виндовой кодировке QString qStr = QString::fromLocal8Bit("Привет!"); QByteArray qBa = QTextCodec::codecForName("IBM866")->fromUnicode( qStr ); const char* ptr = qBa.data(); Название: Как получить "русский" char* из QString Отправлено: Dendy от Февраль 27, 2006, 19:53 Цитата: "Sergeich" Код: QTextCodec::setCodecForCStrings( QTextCodec::codecForName("utf8") ); Далее res можно использовать как const char* Очевидно svictor пользуется Qt 4, а не Qt 3. В Qt 4 QByteArray работает и как массив байтов, и как с-строка. В коде писать не-латиницей - плохой стиль. Неважно какая задача. Лучше сохрани текстьІ в отдельном файле (можно даже заюзать средства Qt Linguist) и в коде пользоваться: Код: QByteArray c_string = unicode_string.toLocal8Bit(); Если не уверен какая кодировка используется для локали - смотри: Код: QTextCodec::setCodecForLocale(); Название: Как получить "русский" char* из QString Отправлено: Вудруф от Февраль 28, 2006, 11:08 Цитата: "svictor" Проверил. Теперь на каждый русский байт формируется два байта, а нужно один в досовской кодировке. Просто нужно передать текст по СОМ порту, чтобы его поняла прога, работающая под виндой. С английским нет проблемм, а с русским как обычно ... :) Логично, в UTF8 русские буквы будут сохраняться двумя байтами... Название: Как получить "русский" char* из QString Отправлено: svictor от Март 01, 2006, 09:28 Большое всем спасибо за подсказки! Все заработало.
Вначале программы вставил (для того чтобы шла кириллица): QTextCodec::setCodecForCStrings( QTextCodec::codecForName("utf8") ); На передачу используется следующий код (воспользовался правилом хорошего тона :) - ввожу текст через lineEdit) QString qStr = ui.lineEdit->text(); QByteArray qBa = qStr.toAscii(); char *ch = qBa.data(); А на прием: char chBuff[2]; chBuff[1] = 0; int iSize = qPort->size(); for(int i = 0; i < iSize; i++) { chBuff[0] = qPort->getch(); ui.textEdit->textCursor().insertText(QString::fromAscii(chBuff)); } qPort - это объект класса QextSerialPort (скачал с сайта http://qextserialport.sourceforge.net/ и адаптировал под Qt4.1). А есть ли другие способы работать с СОМ портом? Хочется проверить ради спортивного интереса. Название: Как получить "русский" char* из QString Отправлено: psj от Март 04, 2006, 13:52 столкнулся с подобной проблемой и ничего не получается! :(
необходимо в xml-file писать русские слова в кодировке utf8. Задача такая. xml создается, НО в него все пишется в UTF-8 кодировке. Несколько раз перечитал и перепробовал пост - ничего не получилось. Win XP, QT 4.1.0, MinGW Собственно, в поле пишется русский текст и его же пытаюсь сохранить в xml. Код:
в итоге получается абракадабра. Если не перекодировать, то все нормально но все в UTF-8 естественно. Название: Как получить "русский" char* из QString Отправлено: Dendy от Март 04, 2006, 14:32 Структура DOM пишется в файл через QTextStream. Должно работать так:
Код: QTextStream ts( &file ); |