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

4

2 回答 2

4

尝试这个:

QTextCodec* utf = QTextCodec::codecForName("UTF-8");
QByteArray data = <<INPUT QBYTEARRAY>>.toUtf8();
QString utfString = utf->toUnicode(data);
qDebug() << utfString;
于 2014-01-04T14:04:31.463 回答
2

正确的方法之一是QTextStream用于读取,然后您可以指定 utf 8 的编解码器,如下所示:

in.setCodec("UTF-8");

有关详细信息,请参阅文档:

无效 QTextStream::setCodec(const char * codecName)

将此流的编解码器设置为 codecName 指定的编码的 QTextCodec。codecName 的常用值包括“ISO 8859-1”、“UTF-8”和“UTF-16”。如果无法识别编码,则不会发生任何事情。

Example:

QTextStream out(&file);
out.setCodec("UTF-8");

QTextStream另一种正确的方法是通过使用专用的 QString 方法来修复您当前的代码,如下所示:

QString in = QString::fromUtf8(File.readAll()), pom;

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

于 2014-01-04T14:40:11.547 回答