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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запись и чтение с файла  (Прочитано 3541 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« : Апрель 11, 2014, 13:45 »

Подскажите
Делаю запись в файл,
но почему-то если читаем русские символы,то он вместо них записывает знаки вопроса.
А если английские то все норм.
Почему так?
Записан
OKTA
Гость
« Ответ #1 : Апрель 11, 2014, 14:02 »

Проблемы с кодировками. В какой кодировке писали, в такой и читайте.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #2 : Апрель 11, 2014, 14:09 »

Код
C++ (Qt)
 
//ставлю кодировку
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
 
QString str = tr("ПРИВЕТ");
 
//пишу в файл
file.write(QVariant(str).toByteArray);
 
 

Что делать???
Записан
OKTA
Гость
« Ответ #3 : Апрель 11, 2014, 14:12 »

А читаешь как?
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #4 : Апрель 11, 2014, 15:03 »

 QByteArray ba = file.readAll();
Записан
OKTA
Гость
« Ответ #5 : Апрель 11, 2014, 15:22 »

Можно делать так с кодировками:
через кодеки
Код:
QTextCodec* codec = QTextCodec::codecForName("Windows-1251");
QByteArray encodedByteArray = ...;
QString decodedString = codec->toUnicode(encodedByteArray);

или глобально

Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName(""Windows-1251"));
Записан
Vamireh
Гость
« Ответ #6 : Апрель 11, 2014, 15:22 »

Код:
#include <QCoreApplication>
#include <QDebug>
#include <QTextStream>
#include <QFile>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile fout("D:/LocaleTest.txt");
    fout.open(QIODevice::WriteOnly);
    QTextStream out(&fout);
    out.setCodec("Windows-1251");
    out << QObject::tr("Привет");

    fout.close();

    QFile fin("D:/LocaleTest.txt");
    fin.open(QIODevice::ReadOnly);
    QTextStream in(&fin);
    in.setCodec("Windows-1251");
    QString str;
    in >> str;

    qDebug() << str;

    return a.exec();
}

Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #7 : Апрель 13, 2014, 09:53 »

QString::toLocal8bit посмотрите в эту сторону.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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