16

Qt で、バイト配列が有効な UTF-8 シーケンスであるかどうかを確認する方法はありますか?

QString::fromUtf8()は、無効なシーケンスがあったことを呼び出し元に通知せずに、サイレントに抑制または置換しているようです。これはそのドキュメントからのものです:

ただし、UTF-8 では無効なシーケンスが発生する可能性があり、そのようなシーケンスが見つかった場合、それらは 1 つ以上の「置換文字」に置き換えられるか、抑制されます。

4

2 に答える 2

20

QTextCodec::toUnicodeを試して、 ConverterStateインスタンスを渡します。ConverterState には のようなメンバーがありinvalidCharsます。ただし、これらは doxygen を介して文書化されていませんが、QTextCodec のドキュメントに記載されているように、パブリック API であると想定しています。

サンプルコード:

QTextCodec::ConverterState state;
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
const QString text = codec->toUnicode(byteArray.constData(), byteArray.size(), &state);
if (state.invalidChars > 0) {
    qDebug() << "Not a valid UTF-8 sequence.";
}
于 2013-08-14T09:46:55.850 に答える