Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
dark.k
78 / 67 / 9
Регистрация: 11.12.2009
Сообщений: 393
1

Из Std в QString, русский текст, потеря данных, Qt 5.3.2

17.02.2015, 17:55. Просмотров 744. Ответов 7
Метки нет (Все метки)

Доброго времени суток!
Ребят, встретился с такой проблемой, что не получается из std конвертировать в QString.
Не могли привести примеры исходного кода как с этим бороться? гугл, только больше мозги запудрил.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void Sotrudnik::addNewQuery()
{
    string str;
    cout<<"Введите фамилию: "; cin>>str;
    strFamily.fromLocal8Bit(str.c_str());
    cout<<"Введите возраст: "; cin>>intAge;
 
    system("cls");
 
    cout<<"фамилия: "<<strFamily.toStdString()<<endl; /// просто пусто
    cout<<" возраст: "<<intAge<<endl;
    system("pause");
 
    QFile file("data.txt");
    if(file.open(QIODevice::WriteOnly))
    {
        QTextStream out(&file);
        out<<intAge<<' ';
        endl(out);
    }
    file.close();
 
    system("cls");
 
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2015, 17:55
Ответы с готовыми решениями:

QString и русский текст
Возник вопрос как вывести в метку на форме (QLabel) текстовую строку на русском языке. Вначале...

QString в std::string
У меня есть объект, который принимает std::string в качестве пути. Я получаю путь из QFileDialog...

Перевод QString в std::string
Всем привет. Есть 2 программы - первая консольная пишется на C++ с использованием Qt, вторая с...

QString, std::string, curl и json-rpc
Добрый день. Возникла проблема следующего характера: Необходимо отправить на хост строку в...

7
RazrFalcon
1393 / 1250 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
17.02.2015, 17:58 2
fromLocal8Bit статическая функция же...
C++ (Qt)
1
strFamily = QString::fromLocal8Bit(str.c_str());
0
dark.k
78 / 67 / 9
Регистрация: 11.12.2009
Сообщений: 393
17.02.2015, 18:08  [ТС] 3
Тут ещё загвоздка в том, что не понятно на каком этапе данные пропадают.
либо:
C++ (Qt)
1
strFamily = QString::fromLocal8Bit(str.c_str());
либо:
C++ (Qt)
1
cout<<"фамилия: "<<strFamily.toStdString()<<endl;
По крайней мере у меня ересь высвечивается))
0
RazrFalcon
1393 / 1250 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
17.02.2015, 18:11 4
Цитата Сообщение от dark.k Посмотреть сообщение
данные пропадают
Цитата Сообщение от dark.k Посмотреть сообщение
ересь высвечивается
Вы уж определитесь...

Если проблема с кодировкой - то ясен пень.
0
Avazart
Эксперт С++
8117 / 5891 / 583
Регистрация: 10.12.2010
Сообщений: 27,240
Записей в блоге: 20
17.02.2015, 20:05 5
Не используй std::string, в чем проблема? см. QTextStream
Создать проблему, а потом героически пытаться ее решить?
0
dark.k
78 / 67 / 9
Регистрация: 11.12.2009
Сообщений: 393
18.02.2015, 02:28  [ТС] 6
Цитата Сообщение от Avazart Посмотреть сообщение
Не используй std::string, в чем проблема? см. QTextStream
Слушай, хорошая штука, но всё равно беда, даже если насильно меняю кодек, никакого прогресса.
0
DrOffset
11878 / 6430 / 1547
Регистрация: 30.01.2014
Сообщений: 10,456
18.02.2015, 11:05 7
Цитата Сообщение от dark.k Посмотреть сообщение
никакого прогресса
Для того, чтобы решить проблему нужно:
1) Абсолютно точно, на 100% представлять в какой кодировке данные приходят (из файла, потока и т.п.)
2) Абсолютно точно, на 100% представлять в какой кодировке нужно увидеть результат.

Судя по коду, читаешь ты с консоли. Консоль в винде в cp866 (DOS). Метод fromLocal8Bit использует текущую системную локаль, для определения этого самого "from". Скорее всего это кодировка cp1251. Естественно пытаясь декодировать 866 под видом 1251, мы получаем невесть что. Еще нужно запомнить, что QString хранит внутри себя юникод. Следовательно, если никаких дополнительных настроек не было применено, результат тоже будет записан в юникоде.
Смотри, проверяй.
0
Avazart
Эксперт С++
8117 / 5891 / 583
Регистрация: 10.12.2010
Сообщений: 27,240
Записей в блоге: 20
18.02.2015, 12:00 8
Цитата Сообщение от dark.k Посмотреть сообщение
Слушай, хорошая штука, но всё равно беда, даже если насильно меняю кодек, никакого прогресса
Кодек тут не при чем, как уже сказали, скорее тут дело в кодировке/шрифте консоли, локальной кодировке и кодировке исходников.
0
18.02.2015, 12:00
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2015, 12:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Xcode , С++ и русский язык: как вывести в файл русский текст без сбитой кодировки?
Как сделать так, чтобы после некоторых манипуляций в файл выводился русский текст без сбитой...

Какими инструментами можно перевести текст в базе данных с английского на русский ?
Текст на английском языке парсится в поле таблицы &quot;поле_1&quot;. Какими инструментами можно перевести...

QString - удаление последнего элемента. Неужели нет аналога std::string pop_back ?
я нуб :)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.