Qt で、バイト配列が有効な UTF-8 シーケンスであるかどうかを確認する方法はありますか?
QString::fromUtf8()は、無効なシーケンスがあったことを呼び出し元に通知せずに、サイレントに抑制または置換しているようです。これはそのドキュメントからのものです:
ただし、UTF-8 では無効なシーケンスが発生する可能性があり、そのようなシーケンスが見つかった場合、それらは 1 つ以上の「置換文字」に置き換えられるか、抑制されます。
Qt で、バイト配列が有効な UTF-8 シーケンスであるかどうかを確認する方法はありますか?
QString::fromUtf8()は、無効なシーケンスがあったことを呼び出し元に通知せずに、サイレントに抑制または置換しているようです。これはそのドキュメントからのものです:
ただし、UTF-8 では無効なシーケンスが発生する可能性があり、そのようなシーケンスが見つかった場合、それらは 1 つ以上の「置換文字」に置き換えられるか、抑制されます。
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.";
}