2010-08-30 175 views
5

我有一個客戶端 - 服務器應用程序,其中客戶端將在Qt(Ubuntu)和服務器將C#。 Qt客戶端將以UTF-16編碼格式發送字符串。 我已經使用QTextCodec類轉換爲UTF-16。但是每當轉換髮生時,它將被填充更多的字符。例如Qt - 將QString轉換爲Unicode QByteArray

「<綁定端點= '2_3'/ >」

將改爲

「\ 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「

我有以下代碼, QString到QByteArray

//'socketMessage' is the QString, listener is the QTcpSocket 
QTextCodec *codec = QTextCodec::codecForName("UTF-16"); 
QByteArray data = codec->fromUnicode(socketMessage); 
listener->write(data); 

我甚至試過th e QTextStream,QDataStream等編碼。但每次我都會得到相同的結果。我在這裏做錯了什麼?

回答

3

開頭的\ ff \ fe是UTF-16的Unicode字節順序標記(BOM),小尾數。我不知道如何讓QTextCodec來給ommit說,但如果你想從UTF-16字符串中的QByteArray沒有BOM,你可以試試這個:

QString s("12345"); 
QByteArray b((const char*) (s.utf16()), s.size() * 2); 
4

雖然問法不久前, 我有同樣的問題。解決方案是使用選項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。