检查Qt中的UTF-8字符串是否有效

sas*_*alm 15 c++ qt utf-8

在Qt中,有没有办法检查字节数组是否是有效的UTF-8序列?

似乎QString :: fromUtf8()默默地抑制或替换无效序列,而不通知调用者有任何序列.这来自其文档:

但是,使用UTF-8可能无效序列,如果发现任何此类序列,它们将被替换为一个或多个"替换字符",或被抑制.

Fra*_*eld 19

尝试使用QTextCodec :: toUnicode并传递ConverterState实例.ConverterState有会员喜欢invalidChars.它们不是通过doxygen记录的,但我认为它们是公共API,因为它们在QTextCodec文档中提到过.

示例代码:

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.";
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这让我朝着正确的方向前进.事实证明,使用[QTextCodec :: codecForUtfText()](http://qt-project.org/doc/qt-4.8/qtextcodec.html#codecForUtfText)有一种更简单的方法,如果没有,你可以指定默认编解码器UTF编码适用于文本.我指定[QTextCodec :: codecForLocale()](http://qt-project.org/doc/qt-4.8/qtextcodec.html#setCodecForLocale)作为默认编解码器. (2认同)