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 のように見えます。しかし、どちらも機能しません。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

正しい方法の 1 つはQTextStream、読み取りに使用することです。次に、次のように utf 8 のコーデックを指定できます。

in.setCodec("UTF-8");

詳細については、ドキュメントを参照してください。

void QTextStream::setCodec(const char * codecName)

このストリームのコーデックを codecName で指定されたエンコーディングの QTextCodec に設定します。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;

ただし、現在利用できるよりも多くのエラー処理をコードに追加したい場合があることに注意してください。

于 2014-01-04T14:40:11.547 に答える