Название: И снова QString в std::string (русский текст) Отправлено: xTr1m от Март 01, 2012, 08:12 Здравствуйте, вот есть у меня поле для ввода текста. Ввожу я туда русский текст и этот текст мне нужно перевести в std::string (так уж получилось). Что я пробовал:
Код: QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251")); Название: Re: И снова QString в std::string (русский текст) Отправлено: Bepec от Март 01, 2012, 08:15 Код: std::locale loc("russian_russia.1251"); Название: Re: И снова QString в std::string (русский текст) Отправлено: BRE от Март 01, 2012, 08:16 QByteArray QTextCodec::fromUnicode ( const QString & str ) const
Название: Re: И снова QString в std::string (русский текст) Отправлено: Bepec от Март 01, 2012, 08:18 BRE, а не слишком ли быстро вы мчитесь? :)
Ему перевести в std::string надо (а у QString даже ф-ция есть для этого), а вы ему QByteArray предлагаете ;) update: ТС, тебе нужен именно .toStdString(); Название: Re: И снова QString в std::string (русский текст) Отправлено: xTr1m от Март 01, 2012, 08:24 Цитировать std::locale loc("russian_russia.1251"); к сожалению, не помогло.std::locale::global(loc); Верес, так в том то и дело, что она возвращает знаки вопроса. P.S. вообще как дико получается, что такая простая задача вызвала столько проблем =) Название: Re: И снова QString в std::string (русский текст) Отправлено: BRE от Март 01, 2012, 08:24 BRE, а не слишком ли быстро вы мчитесь? :) НетЕму перевести в std::string надо (а у QString даже ф-ция есть для этого), а вы ему QByteArray предлагаете ;) Даupdate: ТС, тебе нужен именно .toStdString(); А в какой кодировке будет эта строка?Название: Re: И снова QString в std::string (русский текст) Отправлено: BRE от Март 01, 2012, 08:42 P.S. вообще как дико получается, что такая простая задача вызвала столько проблем =) Нет никаких проблем.В Qt все строки хранятся в юникоде, если тебе нужна другая кодировка воспользуйся QTextCodec. И постарайся не использовать глобальные установки кодировок (QTextCode::setCodecFor...), в дальнейшем будет меньше проблем. Название: Re: И снова QString в std::string (русский текст) Отправлено: Bepec от Март 01, 2012, 08:50 BRE не стоит тут холивар начинать.
Если он будет всегда использовать глобальные установки кодировок - то чики пуки. Если он никогда не будет использовать глобальные установки кодировок - то чики пуки. Смешивать = плохо. Кодировка у нашего автора стоит windows-1251. Ему нужно же перевести в std, который о юникоде не слышал ;) ТС(xTr1m) - собери минимально компилируемый пример и выкинь сюда. Проще будет. Название: Re: И снова QString в std::string (русский текст) Отправлено: BRE от Март 01, 2012, 08:57 2Bepec У нас с тобой разное представление о "чики пуку".
Название: Re: И снова QString в std::string (русский текст) Отправлено: xTr1m от Март 01, 2012, 09:03 хм. сделал простой пример вот так.
Код: QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251")); сделал вот так Код: QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251")); но в реальности у меня вот так Код: QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251")); Название: Re: И снова QString в std::string (русский текст) Отправлено: Bepec от Март 01, 2012, 09:25 BRE - я ж написал, не поднимай холивар.
ТС - а откуда у тебя данные берутся? что за виджет "m_edit"? Название: Re: И снова QString в std::string (русский текст) Отправлено: xTr1m от Март 01, 2012, 09:31 QLineEdit
Название: Re: И снова QString в std::string (русский текст) Отправлено: BRE от Март 01, 2012, 09:37 2ТС Ох, добавь в main:
Код и у тебя заработает toStdString. Но это плохой подход. Название: Re: И снова QString в std::string (русский текст) Отправлено: BRE от Март 01, 2012, 09:50 BRE - я ж написал, не поднимай холивар. Есть одна мудрая мысль: "Не говорите мне что делать и я не скажу куда вам идти".Название: Re: И снова QString в std::string (русский текст) Отправлено: Bepec от Март 01, 2012, 10:03 2 реплики подряд - признак плохого воспитания, не? :P
Название: Re: И снова QString в std::string (русский текст) Отправлено: BRE от Март 01, 2012, 10:08 2 реплики подряд - признак плохого воспитания, не? :P Не, это ответы на совершенно разные вопросы, почему они должны быть в одной реплике? Как ты себе это представляешь? Хочешь поговорить об этом?Название: Re: И снова QString в std::string (русский текст) Отправлено: Bepec от Март 01, 2012, 10:15 2 поста подряд, так же как и цитата двухстраничного коммента - неуважение ко всем, кто читает.
Рабочий пример, даже без указывания кодеков (проверено на русской винде, иных не имею) Код: QString text = ui.lineEdit->text(); Название: Re: И снова QString в std::string (русский текст) Отправлено: BRE от Март 01, 2012, 10:37 2 поста подряд, так же как и цитата двухстраничного коммента - неуважение ко всем, кто читает. Блин, даже не знаю что и делать теперь. Ты там как? Держись!Рабочий пример, даже без указывания кодеков (проверено на русской винде, иных не имею) А ты как проверял?Название: Re: И снова QString в std::string (русский текст) Отправлено: Bepec от Март 01, 2012, 10:49 ёмоё. BRE на тропе войны ;) Весеннее обострение?
Проверял просто - запускал на машине под русской вендой :D Название: Re: И снова QString в std::string (русский текст) Отправлено: xTr1m от Март 01, 2012, 10:50 Господа =), спасибо. Сработал такой совет:
Код: std::string j = text.toLocal8Bit (); Название: Re: И снова QString в std::string (русский текст) Отправлено: BRE от Март 01, 2012, 11:26 ёмоё. BRE на тропе войны ;) Весеннее обострение? Ты себе льстишь.Название: Re: И снова QString в std::string (русский текст) Отправлено: BRE от Март 01, 2012, 11:29 но вопрос такой, а чем мне грозит такое явное приведение? Сейчас происходит перекодирование в 8битную строку с использованием кодека, устанавливаемого методом QTextCodec::setCodecForLocale. По умолчанию он установлен на кодировку твоей локали. Т.е. для платформы с кодировкой CP1251 строка из QLineEdit будет преобразовываться к ней, а для платфорсы с UTF-8 - соответственно в UTF-8.Если это нужное поведение, то все нормально. Название: Re: И снова QString в std::string (русский текст) Отправлено: Bepec от Март 01, 2012, 12:02 Если ты делаешь программу для русскоязычной windows, то всё у тебя хоккей.
Если же ты делаешь кроссплатформенную программу, тебе придётся вникнуть глубже. Ещё глубже. И под конец использовать совсем другие кодеки. (с этой частью знаком теоретически, ибо мазохизмом не страдаю) Название: Re: И снова QString в std::string (русский текст) Отправлено: xTr1m от Март 01, 2012, 13:59 В том то и дело, что для английской она в будущем тоже будет нужна
Название: Re: И снова QString в std::string (русский текст) Отправлено: Bepec от Март 01, 2012, 14:07 Вот тут и назревает вопрос интересный. Будет ли разница на английской локализации винды, иль не будет :)
Ну в принципе, если тупо менять язык интерфейса, разницы нет :) Update: При смене системной локали на суахили/енглиш/украйн/эсперанто русские буктовки отображаются заказячками, НО после приёма из lineEdit и процедурі обработки, получаются русские буковки. PS помнится біл слух, что локаль устанавливаемая при установке и локаль, меняемая в системе разніе вещи, но... Єто слухи, с них спросу нєма. PPS а счас украйн локаль стоит ;) Скептикам - менял именно локаль, а не язік ввода. |