Windows上的QString :: toLocal8Bit()

时间:2018-04-24 12:15:40

标签: qt unicode

我有一个案例,可以概括如下代码:

#include <QCoreApplication>
#include <QStringList>
#include <QDir>
#include <QCryptographicHash>
#include <iostream>
#include <QDebug>
#include <QObject>

using namespace std;
QString Encode(const QString & filePath)
{
    auto temp = filePath.toLocal8Bit();
    qDebug() << QString("Encode 8 bit: ") << temp;
    return temp.toPercentEncoding(" ");
}

QString Decode(const QString & filePath)
{
    auto temp = filePath.toLocal8Bit();
    qDebug() << QString("Decode 8 bit: ") << temp;
    return QByteArray::fromPercentEncoding(temp);
}


int main()
{
    QString raw = Decode(QString("K%C3%A4ssbohrer"));
    qDebug() << QString("Raw:") << raw;
    QString encoded = Encode(raw);
}

此代码输出:

"Decode 8 bit: " "K%C3%A4ssbohrer"
"Raw:" "Kõssbohrer"
"Encode 8 bit: " "K\xE4ssbohrer"

可以看出,当我在包含unicode的字符串上调用toLocal8Bit()时,结果与我最初的不同。而这个问题只发生在Windows中。

如何使我的编码和解码功能相互协作,我该怎么办? 在Windows和Linux中?我的意思是使用Encode我想返回一个QString,我可以稍后使用Decode来获取可能包含unicode的原始QString。

0 个答案:

没有答案