1

私は同様の問題を見つけることができなかったので、ここに行きます:

QStringをQLocalSocketから2つのアプリケーションを介してQLocalServerに送信しています。受信(QLocalServer)アプリケーションはメッセージを受信しますが、エンコーディングが完全に間違っているようです。

QLocalSocket(クライアント)からQString = "x"を送信すると、QLocalServerに外部(中国語?)シンボルが表示されます。私のコードは文字通りNokiaDeveloperのWebサイトからコピーされています

QDebugを介してメッセージを印刷すると、「??」が表示されます。メッセージボックスで起動すると漢字が印刷されます。受信したメッセージをUTF-8、Latin1などに再エンコードしようとしましたが、うまくいきませんでした。

コードは次のとおりです。

//Client
int main(int argc, char *argv[])
{
QLocalSocket * m_socket = new QLocalSocket();
m_socket->connectToServer("SomeServer");

if(m_socket->waitForConnected(1000))
{
    //send a message to the server
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_7);
    out << "x";
    out.device()->seek(0);
    m_socket->write(block);
    m_socket->flush();
    QMessageBox box;
    box.setText("mesage has been sent");
    box.exec();
...
}

//Server - this is within a QMainWindow
void MainWindow::messageReceived()
{
QLocalSocket *clientConnection = m_pServer->nextPendingConnection();

while (clientConnection->bytesAvailable() < (int)sizeof(quint32))
    clientConnection->waitForReadyRead();


connect(clientConnection, SIGNAL(disconnected()),
        clientConnection, SLOT(deleteLater()));

QDataStream in(clientConnection);
in.setVersion(QDataStream::Qt_4_7);
if (clientConnection->bytesAvailable() < (int)sizeof(quint16)) {
    return;
}

QString message;
in >> message;

QMessageBox box;
box.setText(QString(message));
box.exec();
}

どんな助けでも大歓迎です。

4

1 に答える 1

4

const char*サーバーが。を逆シリアル化している間、クライアントはシリアル化していますQString。これらは互換性がありません。前者は文字通り文字列バイトを書き込み、後者は最初にUTF-16にエンコードします。したがって、サーバー側では、生の文字列データ「fff」がUTF-16データであるかのようにQStringにデコードされていると思います...おそらく文字U + 6666、晦になります。

クライアントを変更して、QStringもシリアル化してみてください。

// client writes a QString
out << QString::fromLatin1("fff");

// server reads a QString
QString message;
in >> message;
于 2012-10-25T04:35:19.050 に答える