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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО]Чтение и сохранение файлов с кирилицей  (Прочитано 2118 раз)
Annigilator
Гость
« : Январь 05, 2012, 13:51 »

Здравствуйте  Уважаемые Программисты!

Есть работающий проэкт, в нём некий текст записывается в текстовый файл кирилицей, но после выхода из программы и при последующей загрузке, из файла читается тот же текст, но не в той кодировке, которая должна быть. Система Windows 7, кодировка системы наверное ANSI, а в программе я использую UTF-8.

Вот текст файла где происходит запись в файл:
Код:
bool MainWindow::saveToFile()
{
    QFile file(QDir::homePath() + "/.text1.conf");
    if(file.open(QIODevice::WriteOnly))
    {
        QTextStream stream(&file);
        for(int i = 0; i < model->tasks->count(); i++)
        {
            stream << (*model->tasks)[i].text;
            stream << QString(" ");
            stream << (*model->tasks)[i].minutes;
            stream << "\n";
        }
        file.close();
        return true;
    }
    else
    {
        return false;
    }
    return true;
}
И чтение из файла:
Код:
void MainWindow::loadFromFile()
{
    QFile file(QDir::homePath() + "/.text1.conf");
    if(file.exists())
    {
    if(file.open(QIODevice::ReadOnly))
    {
        QTextStream stream(&file);
        while(!stream.atEnd())
        {
            QString line = stream.readLine();
            QTextStream lineStream(line.toUtf8());
            QString text;
            int minutes;
            if(!line.trimmed().isEmpty())
            {
                text = "";
            while(!lineStream.atEnd())
                {
                QString temp;
                lineStream >> temp;
                bool ok = false;
                QVariant(temp).toInt(&ok);
                if(ok)
                {
                   int mins =  QVariant(temp).toInt(&ok);
                   minutes = mins;
                }
                if(!lineStream.atEnd())
                    text.append(temp + " ");
            }
            model->tasks->append(TaskRow(text, minutes));
            }
        }
        file.close();
    }
    else
    {
        QMessageBox::warning(this,"TTTTTTTTT");
        loadSampleData();
    }
    }
    else
    {
        loadSampleData();
    }
}
Как изменить код, чтобы чтение происходило кирилицы, а не иероглифов?
« Последнее редактирование: Январь 12, 2012, 10:52 от Annigilator » Записан
kambala
Джедай : наставник для всех
*******
Online Online

Сообщений: 4732



Просмотр профиля WWW
« Ответ #1 : Январь 05, 2012, 21:32 »

надо записывать и читать всё или в UTF-8 или в родной кодировке - определись какая тебе нужна. если родная, то просто убери вызов toUtf8() в методе чтения.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Annigilator
Гость
« Ответ #2 : Январь 05, 2012, 21:52 »

Спасибо!
Всё получилось.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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