我有一个案例,可以概括如下代码:
#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。