我有一个客户端服务器应用程序,其中客户端将在Qt(Ubuntu)中,服务器将为C#。 Qt客户端将以UTF-16编码格式发送字符串。
我已使用QTextCodec类将其转换为UTF-16。但是无论何时进行转换,都将填充更多字符。例如
“”
将更改为
“\ff\fe \0\0\0“
我有以下代码将QString转换为QByteArray
//'socketMessage' is the QString, listener is the QTcpSocket
QTextCodec *codec = QTextCodec::codecForName("UTF-16");
QByteArray data = codec->fromUnicode(socketMessage);
listener->write(data);
我什至尝试了QTextStream,QDataStream等进行编码。但是每次我得到相同的结果。我在这里做错什么了吗?
最佳答案
尽管很久以前就问过这个问题,但我也遇到了同样的问题。解决方案是使用选项QTextCodec::IgnoreHeader创建一个QTextEncoder。
QTextCodec *codec = QTextCodec::codecForName("UTF-16");
QTextEncoder *encoderWithoutBom = codec->makeEncoder( QTextCodec::IgnoreHeader );
QString str("Foobar")
QByteArray bytes = encoderWithoutBom ->fromUnicode( s );
这将导致没有BOM的QByteArray。