Russian Qt Forum
Ноябрь 24, 2024, 11:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: И снова QString в std::string (русский текст)  (Прочитано 14507 раз)
xTr1m
Гость
« : Март 01, 2012, 08:12 »

Здравствуйте, вот есть у меня поле для ввода текста. Ввожу я туда русский текст и этот текст мне нужно перевести в std::string (так уж получилось). Что я пробовал:
Код:
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
QString prdId = ui.m_prdIdEdit->text();

// std::string str = prdId.toAscii().data();
// std::string str = prdId.toStdString();
// std::string str = tr(prdId.toStdString().c_str()).toStdString();
// std::string str = tr(prdId.toAscii().data()).toStdString();
всюду знаки вопроса. Буду благодарен за помощь.
« Последнее редактирование: Март 01, 2012, 08:13 от xTr1m » Записан
Bepec
Гость
« Ответ #1 : Март 01, 2012, 08:15 »

Код:
std::locale loc("russian_russia.1251");
std::locale::global(loc);

Записан
BRE
Гость
« Ответ #2 : Март 01, 2012, 08:16 »

QByteArray QTextCodec::fromUnicode ( const QString & str ) const
Записан
Bepec
Гость
« Ответ #3 : Март 01, 2012, 08:18 »

BRE, а не слишком ли быстро вы мчитесь? Улыбающийся

Ему перевести в std::string надо (а у QString даже ф-ция есть для этого), а вы ему QByteArray предлагаете Подмигивающий

update: ТС, тебе нужен именно .toStdString();
Записан
xTr1m
Гость
« Ответ #4 : Март 01, 2012, 08:24 »

Цитировать
std::locale loc("russian_russia.1251");
std::locale::global(loc);
к сожалению, не помогло.

Верес, так в том то и дело, что она возвращает знаки вопроса.

P.S. вообще как дико получается, что такая простая задача вызвала столько проблем =)
Записан
BRE
Гость
« Ответ #5 : Март 01, 2012, 08:24 »

BRE, а не слишком ли быстро вы мчитесь? Улыбающийся
Нет

Ему перевести в std::string надо (а у QString даже ф-ция есть для этого), а вы ему QByteArray предлагаете Подмигивающий
Да

update: ТС, тебе нужен именно .toStdString();
А в какой кодировке будет эта строка?
Записан
BRE
Гость
« Ответ #6 : Март 01, 2012, 08:42 »

P.S. вообще как дико получается, что такая простая задача вызвала столько проблем =)
Нет никаких проблем.
В Qt все строки хранятся в юникоде, если тебе нужна другая кодировка воспользуйся QTextCodec.
И постарайся не использовать глобальные установки кодировок (QTextCode::setCodecFor...), в дальнейшем будет меньше проблем.
Записан
Bepec
Гость
« Ответ #7 : Март 01, 2012, 08:50 »

BRE не стоит тут холивар начинать.

Если он будет всегда использовать глобальные установки кодировок - то чики пуки.

Если он никогда не будет использовать глобальные установки кодировок - то чики пуки.

Смешивать = плохо.


Кодировка у нашего автора стоит windows-1251. Ему нужно же перевести в std, который о юникоде не слышал Подмигивающий

ТС(xTr1m)  - собери минимально компилируемый пример и выкинь сюда. Проще будет.
Записан
BRE
Гость
« Ответ #8 : Март 01, 2012, 08:57 »

2Bepec У нас с тобой разное представление о "чики пуку".
Записан
xTr1m
Гость
« Ответ #9 : Март 01, 2012, 09:03 »

хм. сделал простой пример вот так.
Код:
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));

QString qStr = tr("Лолилол");
std::string stdStr = qStr.toStdString();
stdStr содержит знаки вопроса.

сделал вот так
Код:
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));

QString qStr = ("Лолилол");
std::string stdStr = qStr.toStdString();
работает.

но в реальности у меня вот так
Код:
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));

QString qStr = m_edit->text();
std::string stdStr = qStr.toStdString();
и так не работает
« Последнее редактирование: Март 01, 2012, 09:05 от xTr1m » Записан
Bepec
Гость
« Ответ #10 : Март 01, 2012, 09:25 »

BRE - я ж написал, не поднимай холивар.

Русский в исходниках это плохо! Все на UTF-8! Скажем нет системным локалям! Скажем нет QTextCodec! Нам советуют свыше!!!


ТС - а откуда у тебя данные берутся? что за виджет "m_edit"?
Записан
xTr1m
Гость
« Ответ #11 : Март 01, 2012, 09:31 »

QLineEdit
Записан
BRE
Гость
« Ответ #12 : Март 01, 2012, 09:37 »

2ТС Ох, добавь в main:
Код
C++ (Qt)
QTextCodec::setCodecForCStrings( QTextCodec::codecForName("Windows-1251") );
 
и у тебя заработает toStdString.

Но это плохой подход.
Записан
BRE
Гость
« Ответ #13 : Март 01, 2012, 09:50 »

BRE - я ж написал, не поднимай холивар.
Есть одна мудрая мысль: "Не говорите мне что делать и я не скажу куда вам идти".
Записан
Bepec
Гость
« Ответ #14 : Март 01, 2012, 10:03 »

2 реплики подряд - признак плохого воспитания, не? Показает язык
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.07 секунд. Запросов: 21.