我正在尝试从具有几个特殊字符的文件中加载名称,如果它在文件中(看起来像
meno: Marek Ružička/
),我会显示它:
QFile File("info/"+meno+".txt");
File.open(QIODevice::ReadOnly);
QVariant Data(File.readAll());
QString in = Data.toString(), pom;
if(in.contains("meno:"))
{
pom = in.split("meno:").at(1);
pom=pom.split("/").at(0);
ui->label_meno->setText(trUtf8("Celé meno: ")+pom);
}
trUtf8("Celé meno: ")
部分显示得很好,但我找不到如何在pom中显示字符串,它本身看起来像Marek RužiÄka
,使用toUtf8()
函数使它成为Marek RuþiÃÂka
。
我也尝试过将其转换为
stdString
,但也不起作用。
我不确定从 QFile 到 QVariant 和 QString 的转换是否正确,如果这会导致问题如何正确读取数据?
试试这个:
QTextCodec* utf = QTextCodec::codecForName("UTF-8");
QByteArray data = <<INPUT QBYTEARRAY>>.toUtf8();
QString utfString = utf->toUnicode(data);
qDebug() << utfString;
正确的方法之一是使用
QTextStream
进行读取,然后您可以指定 utf 8 的编解码器,如下所示:
in.setCodec("UTF-8");
请参阅文档了解更多详细信息:
void QTextStream::setCodec(const char * 编解码器名称)
将此流的编解码器设置为 QTextCodec,用于由 codecName 指定的编码。 codecName 的常见值包括“ISO 8859-1”、“UTF-8”和“UTF-16”。如果编码无法识别,则不会发生任何事情。
Example:
QTextStream out(&file);
out.setCodec("UTF-8");
另一种正确的方法是通过使用
专用的 QString 方法来修复当前代码而不使用
QTextStream
,如下所示:
QString in = QString::fromUtf8(File.readAll()), pom;
请注意,尽管您可能希望在代码中添加比现在更多的错误处理。