QByteArray zu QString
Habe ich Probleme mit QByteArray
und QString
.
Bin ich beim Lesen einer Datei und speichert seine Informationen in einer QByteArray
. Die Datei wird in unicode, so dass es enthält so etwas wie: t\0 e\0 s\0 t\0 \0 \0
Ich versuche, vergleichen Sie diesen Wert mit meinen angegebenen Wert, aber es schlägt fehl, weil im debugger sehe ich es nicht ein unicode-string.
Wird der code alles erklären:
QByteArray Data; //contains unicode string "t\0 e\0 s\0 t\0 \0 \0"
QString myValue = "test"; //value to compare.
if(Data.contains(myValue))
//do some stuff.
else
//do other stuff.
Im debugger zeigt er mir an, dass die variable Data
hat den Wert "t\0 e\0 s\0 t\0 \0 \0"
und myValue
hat den Wert "test"
. Wie kann ich es beheben?
InformationsquelleAutor der Frage Nika | 2013-01-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie QTextCodec zu konvertieren, wird das bytearray in einen string:
(1015 ist UTF-16, 1014 UTF-16LE, 1013 UTF-16BE, 106 UTF-8)
Aus Ihrem Beispiel können wir sehen, dass der string
"test"
codiert als"t\0 e\0 s\0 t\0 \0 \0"
in Ihre Codierung, d.h. jedes ascii-Zeichen, gefolgt von einem\0
-byte, oder resp. jedes ascii-Zeichen codiert als 2 bytes. Den nur unicode-Codierung, in denen ascii-Zeichen codiert sind, in diesem Weg, UTF-16 oder UCS-2 (das ist eine eingeschränkte version von UTF-16), also in deinem Fall die 1015 mib benötigt wird (vorausgesetzt, Ihre lokalen endian Typ ist die gleiche wie die input-endian Typ).InformationsquelleAutor der Antwort BeniBela
können Sie
QString::fromAscii()
mit
data()
Rückkehr einechar*
für QT5, sollten Sie
fromCString()
statt, alsfromAscii()
ist veraltet, siehehttps://bugreports.qt-project.org/browse/QTBUG-21872https://bugreports.qt.io/browse/QTBUG-21872InformationsquelleAutor der Antwort octoback
Kann man finden, QString::fromUtf8() auch nützlich.
Für
QByteArray input
von"\010"
und"\000"
QString::fromLocal8Bit(Eingabe, 1) zurückgegeben
"\010"
und""
aber QString::fromUtf8(Eingabe, 1) korrekt zurückgegeben"\010"
und"\000"
.InformationsquelleAutor der Antwort Efreeto
Verwenden
QString::fromUtf16((ushort *)Data.data())
wie im folgenden code-Beispiel:Dies ist eine alternative Lösung, die man mit QTextCodec. Der code wurde getestet unter Verwendung von Qt 5.4.
InformationsquelleAutor der Antwort jonathanzh
Können Sie verwenden:
InformationsquelleAutor der Antwort Tarek.Mh
InformationsquelleAutor der Antwort Vladislav Kolodka
Können Sie verwenden:
Daten ist ein QByteArray.
InformationsquelleAutor der Antwort Ounga