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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Русский текст, QString, файлы [Решено]  (Прочитано 20768 раз)
styder
Гость
« : Январь 30, 2011, 20:14 »

Код:
tt = inStream.read(9);
QString m("28 января");
cout << tt.contains(m);
outStream << tt << " " << m << endl;
файл из которого читаю в utf-8, как и файл, в который пишу, как и кодировка проекта в qt creator.
tt типа QString, значение - "28 января". в консоль выводится 0, т.е. не совпадает.
в outStream файл пишется "28 января 28 yiaa?y"
что забавно, вот такой костыль работает не работает))
Код:
[s]cout << (tt.toInt() == m.toInt());[/s]
но не хотелось бы так оставлять, ибо непонятно что происходит.
как можно подружить эти две строки, чтобы при сравнении было true?
« Последнее редактирование: Январь 31, 2011, 00:33 от styder » Записан
maint
Гость
« Ответ #1 : Январь 30, 2011, 20:56 »

Код:
QString m(trUtf8("28 января")); 
А если так ?
Записан
styder
Гость
« Ответ #2 : Январь 30, 2011, 21:08 »

от QObject не наследую, но добавил инклюдом и написал вот так.
Код:
QString m(QObject::trUtf8("28 января"));
и все равно никак, в файле "28 января 28 НепонимающийНепонимающий?"
а в консоли 0.
пробовал вот так:
Код:
QString m = QString::fromUtf8("28 февраля");
в последнем случае в файле "28 января 28 oaa?aey". хотя бы русские буквы появились))
Записан
Fat-Zer
Гость
« Ответ #3 : Январь 30, 2011, 22:02 »

а если при записи m.toUtf8()
Записан
styder
Гость
« Ответ #4 : Январь 30, 2011, 22:12 »

все равно фигня всякая пишется. но мне главное, чтобы сравнение прошло нормально.
Записан
Fat-Zer
Гость
« Ответ #5 : Январь 30, 2011, 22:22 »

inStream - это QIODevice?
и tt кто такой? QString?
« Последнее редактирование: Январь 30, 2011, 22:25 от Fat-Zer » Записан
styder
Гость
« Ответ #6 : Январь 30, 2011, 22:35 »

QTextStream inStream; прицеплен к QFile. файл открыт с флагом текст. все то же самое и для outStream.
QString tt;
Записан
Fat-Zer
Гость
« Ответ #7 : Январь 30, 2011, 23:11 »

Код
C++ (Qt)
inStream.setCodec(QTextCodec::codecForName("UTF-8"));
 
и будет вам счачтье
Записан
styder
Гость
« Ответ #8 : Январь 30, 2011, 23:26 »

Код
C++ (Qt)
inStream.setCodec(QTextCodec::codecForName("UTF-8"));
 
и будет вам счачтье
Это я уже попробовал, и тоже не помогает. тоесть, прочитать из одного файла кириллицу и записать в другой - без проблем. проблема в том, чтобы сравнить слово из прочитанного текста с константной строкой, определенной в самом коде. притом, проблема точно в кодировках, так как если в строке только число, то сравнение проходит нормально.
Записан
Fat-Zer
Гость
« Ответ #9 : Январь 30, 2011, 23:34 »

пример в атаче
Записан
styder
Гость
« Ответ #10 : Январь 31, 2011, 00:12 »

пример в атаче
Во что получается. Создаю проект в qt creator, открываю main.cpp. компилю - false/false
открываю main.cpp в блокноте. принудительно перевожу в utf-8, закрываю, открываю в qt creator, вместо русских букв - иероглифы. компилю - true/false. работает))
подумал, что забыл проект в utf-8 поставить, но не угадал. в свойствах стоит utf-8.
вот и вопрос, в какой же кодировке создает файлы qt creator? блокнот говорит, что  в ANSI, хотя в проекте написано utf-8.

Спасибо, Fat-Zer, проблема решена. Открываем блокнот, пишем строку в utf8, копируем в креатор. получаем нечитаемый треш. к комментариях подписываем, что в треше имелось ввиду)).
« Последнее редактирование: Январь 31, 2011, 00:31 от styder » Записан
Fat-Zer
Гость
« Ответ #11 : Январь 31, 2011, 00:32 »

винда, второй креатор?
не забывайте, что по умолчанию он использует "теневую сборку" и надо файл с данными в -build директорию скопировать.
ЗЫ: у меня креатор всё без лишних напоминаний в юникоде создаёт/хранит... и в линуксе и в винде...
[added]
соврал... оказывается в винде создаёт в cp-1251... значит похоже он использует системную...
« Последнее редактирование: Январь 31, 2011, 00:36 от Fat-Zer » Записан
styder
Гость
« Ответ #12 : Январь 31, 2011, 00:47 »

винда, второй креатор?
не забывайте, что по умолчанию он использует "теневую сборку" и надо файл с данными в -build директорию скопировать.
ЗЫ: у меня креатор всё без лишних напоминаний в юникоде создаёт/хранит... и в линуксе и в винде...
[added]
соврал... оказывается в винде создаёт в cp-1251... значит похоже он использует системную...

про теневую сборку знаю.
линукс это хорошо)). я сразу понял, что из линукса, не увидев костыля system("pause") в конце программы
Записан
Sahab
Гость
« Ответ #13 : Январь 31, 2011, 12:13 »

Цитировать
я сразу понял, что из линукса, не увидев костыля system("pause") в конце программы
Шокированный Шокированный
Записан
styder
Гость
« Ответ #14 : Январь 31, 2011, 15:32 »

Цитировать
я сразу понял, что из линукса, не увидев костыля system("pause") в конце программы
Шокированный Шокированный
что-то не так? можно конечно, вызывать getch, но это еще больший костыль. можно еще командную строку вызывать с параметром /K. но system("pause") хотя бы пишет, что ожидается от пользователя.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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