Как установить кодировку XML-файла в Qt? - PullRequest
4 голосов
/ 14 марта 2019

Я пишу XML-файл в Qt:

QString fname = "L.xml";
QFile file(fname);
if (file.open(QIODevice::WriteOnly)) {

    QTextStream streamFileOut(&file);
    streamFileOut.setCodec("Windows-1251");

    QString string;

    QXmlStreamWriter xmlWriter(&string);
    xmlWriter.setAutoFormatting(true);
    xmlWriter.writeStartDocument();
        xmlWriter.writeStartElement("LIST");

            xmlWriter.writeStartElement("V");
            xmlWriter.writeCharacters("Привет");
            xmlWriter.writeEndElement();

            xmlWriter.writeStartElement("S");
            xmlWriter.writeCharacters("Привет");
            xmlWriter.writeEndElement();


        xmlWriter.writeEndElement();
    xmlWriter.writeEndDocument();

    streamFileOut << string;
    streamFileOut.flush();
    file.close();
}

Я получаю следующий XML:

<?xml version="1.0"?>
<LIST>
    <V>Привет</V>
    <S>Привет</S>
</LIST>

Мне нужно получить XML:

<?xml version="1.0" encoding="windows-1251" ?>
<LIST>
    <V>Привет</V>
    <S>Привет</S>
</LIST>

В моем XML нет encoding = "windows-1251" . Как это исправить?

1 Ответ

4 голосов
/ 14 марта 2019

Используйте QXmlStreamWriter :: setCodec () , но вы не можете транслировать на QString и по-прежнему сохранять атрибут кодирования, как отмечается в документе. Переходя непосредственно к файлу, он работает:

#include <QFile>
#include <QXmlStreamWriter>
#include <QString>

int main()
{
    auto file = QFile{ "L.xml" };
    if (file.open(QIODevice::WriteOnly))
    {
        auto xmlWriter = QXmlStreamWriter{ &file };
        xmlWriter.setAutoFormatting(true);
        xmlWriter.setCodec("windows-1251");
        xmlWriter.writeStartDocument();
        {
            xmlWriter.writeStartElement("LIST");
            {
                xmlWriter.writeStartElement("V");
                {
                    xmlWriter.writeCharacters(u8"Привет");
                }
                xmlWriter.writeEndElement();

                xmlWriter.writeStartElement("S");
                {
                    xmlWriter.writeCharacters(u8"Привет");
                }
                xmlWriter.writeEndElement();
            }
            xmlWriter.writeEndElement();
        }
        xmlWriter.writeEndDocument();
    }
}

Урожайность:

<?xml version="1.0" encoding="windows-1251"?>
<LIST>
    <V>Привет</V>
    <S>Привет</S>
</LIST>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...