Russian Qt Forum

Qt => Общие вопросы => Тема начата: danquimby от Июнь 04, 2011, 11:18



Название: utf8 и обратно.
Отправлено: danquimby от Июнь 04, 2011, 11:18
Доброе утро.
У меня есть вопрос , ответ который я не смог найти.

Код:
void    CSession::_sendMessage(QString str)
{
        QByteArray block = str.toUtf8();
        QDataStream out(&block, QIODevice::WriteOnly);
        out.setVersion(QDataStream::Qt_4_7);
        socket->write(block.data(), block.size());
}
есть метод который отсылает сообщение в Utf8 и есть другой который принимает его
отослать то все нормально, а вот получить , если я хочу получить русские буквы
проблема.

Код:
void    CSession::readSocket()
{
    QDataStream in(socket);
    in.setVersion(QDataStream::Qt_4_7);
    quint32 number_bytes = socket->bytesAvailable();
    if (number_bytes == 0) return;// no data
    QString str;
    quint8    ch;
    for(int i = 0 ; i != number_bytes;i++)
    {
        in >> ch;
        str += ch;
    }
    qDebug() << number_bytes << str;//.toUtf8();
}

Возможно узнать как реализовать ?


Название: Re: utf8 и обратно.
Отправлено: LisandreL от Июнь 04, 2011, 11:35
Вы уж определитесь, через потоки вы работаете или нет. А то отсылаете без него, непонятно для чего его создавая.

Код
C++ (Qt)
void    CSession::_sendMessage(QString str)
{
       QByteArray block = str.toUtf8();
       QDataStream out( socket );
       out.setVersion( QDataStream::Qt_4_7 );
       out.setByteOrder( QDataStream::LittleEndian );
       out << block;
       flush();
}

Код
C++ (Qt)
void    CSession::readSocket()
{
   while ( bytesAvailable() >= 4 )
   {
       QDataStream in(this);
       quint32 length;
       in.setVersion( QDataStream::Qt_4_7 );
       in.setByteOrder( QDataStream::LittleEndian );
       socket->peek( (char*)&length, 4 );
       if ( bytesAvailable() >= 4+length )
       {
             QByteArray block;
             QString string;
             in >> block;
             string = QString::froUtf8( block.data(), block.size() );
             qDebug() << string;
             emit stringRecieved( string );
       }
       else
       {
             return; // Ещё не все данные пришли.
       }
   }
}
Ну это если вам действительно надо передавать именно в Utf-8.


Название: Re: utf8 и обратно.
Отправлено: danquimby от Июнь 04, 2011, 11:50
спс LisandreL то что нужно.А насчет utf8 просто мой серверный програмер сказал
что все чат message в utf8 должны приходить, ну и он мне на клиент высылает тоже в utf8


Название: Re: utf8 и обратно.
Отправлено: LisandreL от Июнь 04, 2011, 12:03
Вы _sendMessage отправляете то, что readSocket принимает или с какой-то другой прогой конектиться пробуете?


Название: Re: utf8 и обратно.
Отправлено: danquimby от Июнь 04, 2011, 12:08
Вы _sendMessage отправляете то, что readSocket принимает или с какой-то другой прогой конектиться пробуете?
у меня есть эхо сервер. у которого есть буфер
char          szBuff[DEFAULT_BUFFER];
он его заполняет и в обратку отправляет. без изменений.
Как говориться "за что купил , за то и продал"


Название: Re: utf8 и обратно.
Отправлено: danquimby от Июнь 04, 2011, 12:21
все заработало , спс большое ...   :-*