Qt - Converting QString to Unicode QByteArray
I have a client-server application where client will be in Qt(Ubuntu) and server will be C#. Qt client willsend the strings in UTF-16 encoded format. I have used the QTextCodec class to convert to UTF-16. But whenever the conversion happens it will be padded with some more characters. For example
"<bind endpoint='2_3'/>"
will be changed to
"\ff\fe<\0b\0i\0n\0d\0 \0e\0n\0d\0p\0o\0i\0n\0t\0=\0'\02\0_\03\0'\0/\0>\0\0\0"
I have following code which converts the QString to QByteArray
//'socketMessage' is the QString, listener is the QTcpSocket
QTextCodec *codec = QTextCodec::codecForN开发者_StackOverflow社区ame("UTF-16");
QByteArray data = codec->fromUnicode(socketMessage);
listener->write(data);
I have even tried the QTextStream,QDataStream etc for encoding. But everytime I end up with the same result. Am I doing something wrong here?
Though the question is asked long ago, I had the same problem. The solution to it is to create an QTextEncoder with the option QTextCodec::IgnoreHeader.
QTextCodec *codec = QTextCodec::codecForName("UTF-16");
QTextEncoder *encoderWithoutBom = codec->makeEncoder( QTextCodec::IgnoreHeader );
QString str("Foobar")
QByteArray bytes = encoderWithoutBom ->fromUnicode( s );
This will result in a QByteArray without BOM.
The \ff\fe at the beginning is the Unicode byte order mark (BOM) for UTF-16, little-endian. I'm not sure how to get the QTextCodec to ommit that but if you want to get a QByteArray from a string in UTF-16 without the BOM you could try this:
QString s("12345");
QByteArray b((const char*) (s.utf16()), s.size() * 2);
精彩评论