I'm having issues with QByteArray
and QString
.
I'm reading a file and stores its information in a QByteArray
. The file is in unicode, so it contains something like: t\0 e\0 s\0 t\0 \0 \0
I'm trying to compare this value to my specified value, but it fails, because in the debugger I see it's not an unicode string.
The code will explain everything:
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.
In the debugger, it shows me that the variable Data
has the value "t\0 e\0 s\0 t\0 \0 \0"
and myValue
has the value "test"
. How can I fix it?
You can use QTextCodec to convert the bytearray to a string:
(1015 is UTF-16, 1014 UTF-16LE, 1013 UTF-16BE, 106 UTF-8)
From your example we can see that the string
"test"
is encoded as"t\0 e\0 s\0 t\0 \0 \0"
in your encoding, i.e. every ascii character is followed by a\0
-byte, or resp. every ascii character is encoded as 2 bytes. The only unicode encoding in which ascii letters are encoded in this way, are UTF-16 or UCS-2 (which is a restricted version of UTF-16), so in your case the 1015 mib is needed (assuming your local endianess is the same as the input endianess).You can use this QString constructor for conversion from QByteArray to QString:
QString(const QByteArray &ba)
You can use:
Use
QString::fromUtf16((ushort *)Data.data())
, as shown in the following code example:This is an alternative solution to the one using QTextCodec. The code has been tested using Qt 5.4.
you can use
QString::fromAscii()
with
data()
returning achar*
for QT5, you should use
fromCString()
instead, asfromAscii()
is deprecated, seehttps://bugreports.qt-project.org/browse/QTBUG-21872https://bugreports.qt.io/browse/QTBUG-21872