使用正确的编码加载并显示QString

问题描述 投票:0回答:2

我正在尝试从具有几个特殊字符的文件中加载名称,如果它在文件中(看起来像

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 的转换是否正确,如果这会导致问题如何正确读取数据?

c++ qt qstring qtcore qfile
2个回答
4
投票

试试这个:

QTextCodec* utf = QTextCodec::codecForName("UTF-8");
QByteArray data = <<INPUT QBYTEARRAY>>.toUtf8();
QString utfString = utf->toUnicode(data);
qDebug() << utfString;

2
投票

正确的方法之一是使用

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;

请注意,尽管您可能希望在代码中添加比现在更多的错误处理。

© www.soinside.com 2019 - 2024. All rights reserved.