Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: styder от Январь 30, 2011, 20:14



Название: Русский текст, QString, файлы [Решено]
Отправлено: 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?


Название: Re: Русский текст, QString, файлы
Отправлено: maint от Январь 30, 2011, 20:56
Код:
QString m(trUtf8("28 января")); 
А если так ?


Название: Re: Русский текст, QString, файлы
Отправлено: styder от Январь 30, 2011, 21:08
от QObject не наследую, но добавил инклюдом и написал вот так.
Код:
QString m(QObject::trUtf8("28 января"));
и все равно никак, в файле "28 января 28 ???????"
а в консоли 0.
пробовал вот так:
Код:
QString m = QString::fromUtf8("28 февраля");
в последнем случае в файле "28 января 28 oaa?aey". хотя бы русские буквы появились))


Название: Re: Русский текст, QString, файлы
Отправлено: Fat-Zer от Январь 30, 2011, 22:02
а если при записи m.toUtf8()


Название: Re: Русский текст, QString, файлы
Отправлено: styder от Январь 30, 2011, 22:12
все равно фигня всякая пишется. но мне главное, чтобы сравнение прошло нормально.


Название: Re: Русский текст, QString, файлы
Отправлено: Fat-Zer от Январь 30, 2011, 22:22
inStream - это QIODevice?
и tt кто такой? QString?


Название: Re: Русский текст, QString, файлы
Отправлено: styder от Январь 30, 2011, 22:35
QTextStream inStream; прицеплен к QFile. файл открыт с флагом текст. все то же самое и для outStream.
QString tt;


Название: Re: Русский текст, QString, файлы
Отправлено: Fat-Zer от Январь 30, 2011, 23:11
Код
C++ (Qt)
inStream.setCodec(QTextCodec::codecForName("UTF-8"));
 
и будет вам счачтье


Название: Re: Русский текст, QString, файлы
Отправлено: styder от Январь 30, 2011, 23:26
Код
C++ (Qt)
inStream.setCodec(QTextCodec::codecForName("UTF-8"));
 
и будет вам счачтье
Это я уже попробовал, и тоже не помогает. тоесть, прочитать из одного файла кириллицу и записать в другой - без проблем. проблема в том, чтобы сравнить слово из прочитанного текста с константной строкой, определенной в самом коде. притом, проблема точно в кодировках, так как если в строке только число, то сравнение проходит нормально.


Название: Re: Русский текст, QString, файлы
Отправлено: Fat-Zer от Январь 30, 2011, 23:34
пример в атаче


Название: Re: Русский текст, QString, файлы
Отправлено: styder от Январь 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, копируем в креатор. получаем нечитаемый треш. к комментариях подписываем, что в треше имелось ввиду)).


Название: Re: Русский текст, QString, файлы
Отправлено: Fat-Zer от Январь 31, 2011, 00:32
винда, второй креатор?
не забывайте, что по умолчанию он использует "теневую сборку" и надо файл с данными в -build директорию скопировать.
ЗЫ: у меня креатор всё без лишних напоминаний в юникоде создаёт/хранит... и в линуксе и в винде...
[added]
соврал... оказывается в винде создаёт в cp-1251... значит похоже он использует системную...


Название: Re: Русский текст, QString, файлы [Решено]
Отправлено: styder от Январь 31, 2011, 00:47
винда, второй креатор?
не забывайте, что по умолчанию он использует "теневую сборку" и надо файл с данными в -build директорию скопировать.
ЗЫ: у меня креатор всё без лишних напоминаний в юникоде создаёт/хранит... и в линуксе и в винде...
[added]
соврал... оказывается в винде создаёт в cp-1251... значит похоже он использует системную...

про теневую сборку знаю.
линукс это хорошо)). я сразу понял, что из линукса, не увидев костыля system("pause") в конце программы


Название: Re: Русский текст, QString, файлы [Решено]
Отправлено: Sahab от Январь 31, 2011, 12:13
Цитировать
я сразу понял, что из линукса, не увидев костыля system("pause") в конце программы
:o :o


Название: Re: Русский текст, QString, файлы [Решено]
Отправлено: styder от Январь 31, 2011, 15:32
Цитировать
я сразу понял, что из линукса, не увидев костыля system("pause") в конце программы
:o :o
что-то не так? можно конечно, вызывать getch, но это еще больший костыль. можно еще командную строку вызывать с параметром /K. но system("pause") хотя бы пишет, что ожидается от пользователя.