CLI: Fix XML encoding when export database

Add write function to TextStream
Fix 
This commit is contained in:
Balazs Gyurak 2019-11-29 19:12:50 +00:00 committed by Jonathan White
parent 792c1c94f7
commit 06e0f38523
3 changed files with 12 additions and 1 deletions

@ -51,7 +51,7 @@ int Export::executeWithDatabase(QSharedPointer<Database> database, QSharedPointe
errorTextStream << QObject::tr("Unable to export database to XML: %1").arg(errorMessage) << endl;
return EXIT_FAILURE;
}
outputTextStream << xmlData.constData() << endl;
outputTextStream.write(xmlData.constData());
} else if (format.startsWith(QStringLiteral("csv"), Qt::CaseInsensitive)) {
CsvExporter csvExporter;
outputTextStream << csvExporter.exportDatabase(database);

@ -58,6 +58,15 @@ TextStream::TextStream(const QByteArray& array, QIODevice::OpenMode openMode)
detectCodec();
}
void TextStream::write(const char* str)
{
// Workaround for an issue with QTextStream. Its operator<<(const char *string) will encode the
// string with a non-UTF-8 encoding. We work around this by wrapping the input string into
// a QString, thus enforcing UTF-8. More info:
// https://code.qt.io/cgit/qt/qtbase.git/commit?id=cec8cdba4d1b856e17c8743ba8803349d42dc701
*this << QString(str);
}
void TextStream::detectCodec()
{
QString codecName = "UTF-8";

@ -43,6 +43,8 @@ public:
explicit TextStream(QByteArray* array, QIODevice::OpenMode openMode = QIODevice::ReadWrite);
explicit TextStream(const QByteArray& array, QIODevice::OpenMode openMode = QIODevice::ReadOnly);
void write(const char* str);
private:
void detectCodec();
};