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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запись XML, проблема с кодировкой  (Прочитано 6867 раз)
alexey.pertcev
Гость
« : Ноябрь 28, 2011, 13:48 »

Господа,
Есть следующий код который записывает строку между тегами
Код:
   
    QDomDocument opt;
    QFile iFile(path);
    iFile.open(QFile::ReadOnly);
    opt.setContent(&iFile);

    QDomElement domElement = opt.documentElement();
    QDomNode node;
            node = domElement.firstChild();
            qDebug() << node.toElement().text();
            node.childNodes().item(0).setNodeValue( "кирилица" );


     iFile.close();
        QFile oFile(path);
        oFile.open(QFile::ReadWrite);
            QTextStream out(&oFile);
            out.setCodec( QTextCodec::codecForName("UTF-8") );
            opt.save(out, 4);//, QDomNode::EncodingFromTextStream);
            oFile.close();
Сам xml файл такой:
Код:
<?xml version='1.0' encoding='UTF-8'?>
<first>
    <second>qwe</second>
    <third>Проверка Русского языка</third>
</first>
Проблема: программа криво записывает кирилицу, после её выполнения xml файл становится таким
Код:
<?xml version='1.0' encoding='UTF-8'?>
<first>
    <second>кирилица в норме</second>
    <third>Проверка Русского языка</third>
</first>

через qDebug ранее записанная кирилица(строка: Проверка Русского языка) выводится нормально.

PS. Win XP, qtcreator 2.0.1, Qt 4.7.0
PPS. вечером проверю этот же код на kubuntu, тогда отпишусь
Записан
alexey.pertcev
Гость
« Ответ #1 : Ноябрь 28, 2011, 16:40 »

Небольшое уточнение, проблема пропадает если брать значение из каковонибудь lineEdit'а.
Вот так все отлично работает:
Код:
node.childNodes().item(0).setNodeValue(ui->lineEdit->text());

Пробовал сохранять в QString и затем писать, не помогло, то же самое.
Кстати если использовать метод toUtf8(), крякозябры остаются, но уже другие
Код:
node.childNodes().item(0).setNodeValue(QString("Трололо").toUtf8());
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #2 : Ноябрь 28, 2011, 16:51 »

[пальцем в небо] может просто надо кодировку в нижнем регистре написать - out.setCodec( QTextCodec::codecForName("utf-8") ) ?
Записан

Изучением 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
alexey.pertcev
Гость
« Ответ #3 : Ноябрь 28, 2011, 16:52 »

Господа,

Прошу извинить, проблема была никак не связана с работой xml.
Сама программа внутри себя не понимала кирилицу, и то что я писал внутри неё она честно выводила крякозябрами.

PS.
Решение:
подключить #include <QTextCodec>
и добавить в int main()
Код:
    QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForCStrings(codec);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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