Russian Qt Forum
Ноябрь 25, 2024, 18:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: utf8 и обратно.  (Прочитано 3081 раз)
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();
}

Возможно узнать как реализовать ?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Июнь 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.
« Последнее редактирование: Июнь 04, 2011, 11:43 от LisandreL » Записан
danquimby
Гость
« Ответ #2 : Июнь 04, 2011, 11:50 »

спс LisandreL то что нужно.А насчет utf8 просто мой серверный програмер сказал
что все чат message в utf8 должны приходить, ну и он мне на клиент высылает тоже в utf8
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #3 : Июнь 04, 2011, 12:03 »

Вы _sendMessage отправляете то, что readSocket принимает или с какой-то другой прогой конектиться пробуете?
Записан
danquimby
Гость
« Ответ #4 : Июнь 04, 2011, 12:08 »

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

все заработало , спс большое ...   Целующий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.387 секунд. Запросов: 23.