2013-08-14 10 views
10

In Qt, gibt es eine Möglichkeit zu überprüfen, ob ein Byte-Array eine gültige UTF-8-Sequenz ist?Prüfen, ob UTF-8-String in Qt gültig ist

Es scheint, dass QString::fromUtf8() unterdrückt oder ersetzt ungültige Sequenzen, ohne den Anrufer, dass es irgendwelche gab. Dies ist aus seiner Dokumentation:

jedoch ungültige Sequenzen sind möglich mit UTF-8 und, wenn eine solche gefunden wird, werden sie mit einem oder mehr „Ersatzzeichen“ oder unterdrückt ersetzt werden.

+0

Ich vermute, dass Sie eine Unicode-Bibliothek verwenden müssen, um die Gültigkeit einer UTF8-Zeichenfolge zu überprüfen. –

+0

Ich habe dieses Code-Snippet gefunden: [https://github.com/JulienPalard/is_utf8]. Es könnte nützlich sein. –

+0

Der Link gibt mir "Seite nicht gefunden" – sashoalm

Antwort

13

Mit QTextCodec::toUnicode versuchen und eine ConverterState Instanz übergeben. ConverterState hat Mitglieder wie invalidChars. Sie sind zwar nicht über doxygen dokumentiert, aber ich gehe davon aus, dass sie öffentliche APIs sind, wie sie in der QTextCodec-Dokumentation erwähnt werden.

Beispielcode:

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."; 
} 
+1

Danke, das brachte mich in die richtige Richtung. Es ergibt sich ein noch einfacherer Weg mit [QTextCodec :: codecForUtfText()] (http://qt-project.org/doc/qt-4.8/qtextcodec.html#codecForUtfText), mit dem Sie einen Standard-Codec angeben können, wenn nein UTF-Codierung ist für den Text geeignet. Ich habe [QTextCodec :: codecForLocale()] (http://qt-project.org/doc/qt-4.8/qtextcodec.html#setCodecForLocale) als Standard-Codec angegeben. – sashoalm

2

Die ConverterState Art und Weise, die bereits here von Frank Osterfeld berichtet wurde, funktioniert auch, wenn der Text nicht hat "BOM (Byte Order Mark)" (*).

(*) Im Gegensatz zu QTextCodec::codecForUtfText(), die eine Stückliste im Text benötigt, um zu wissen, dass es in Utf-8 ist.

Verwandte Themen