Russian Qt Forum

Qt => Вопросы новичков => Тема начата: polina89 от Февраль 13, 2014, 11:14



Название: UTF-8 и UTF-16
Отправлено: polina89 от Февраль 13, 2014, 11:14
Здравствуйте! :)Вопрос такой. Я получаю из другой программы по TCP/IP данные.(строку в xml). Данные идут в кодировке UTF-16. В настройках моего qt по умолчанию стоит кодировка UTF-8.Соответственно при пересылке русских букв возникают кракозябры ::) Как от них избавиться?) пробовала fromUtf8. В том случае, если от клиента на мой сервер идет целиковая строка, то все ок(QString), но от того клиента, с которым мне приходится работать, данные идут посимвольно и получается полная ерунда.Вот кусочки кода. Получение данных на сервер:
Код:
void Server::startRead()
{
int m=client->bytesAvailable();
char *buffer =new char[client->bytesAvailable()];
client->read(buffer, client->bytesAvailable());
client->close();
emit DataAccepted(buffer,m);


}
Вывод на экран:
Код:
QString str;
QByteArray array(text,count);
str="";
for (int i=0; i<count; i++)
{
str1=QObject::trUtf8(text+i);
str+=str1;
}
ui->ServerEdit->setText(str)
Мерси!


Название: Re: UTF-8 и UTF-16
Отправлено: carrygun от Февраль 13, 2014, 12:18
Нужно, наверное, посмотреть в сторону QTextCodec (http://qt-project.org/doc/qt-4.8/qtextcodec.html).


Название: Re: UTF-8 и UTF-16
Отправлено: kambala от Февраль 13, 2014, 12:20
так может надо QString::fromUtf16() использовать?


Название: Re: UTF-8 и UTF-16
Отправлено: polina89 от Февраль 13, 2014, 12:46
Простите за опечатку, использовала QObject::trUtf8().QObject::trUtf16() не существует. В сторону QTextCodec смотрела.Не особо помогло. Тут дело вот в чем. В параметре QObject::trUtf8() можно передать только char*. Если написать
Код:
 QObject::trUtf8(text) 
, то вернется естественно не весь массив, а только первый элемент, так как работаем с указателем. Пробовала делать так:применять QObject::trUtf8() к каждому элементу массива и суммировать это в стринг. Но вышла как раз ерунда.
Код:
str="";
for (int i=0; i<count; i++)
{
   str+=QObject::trUtf8(text+i);
}


Название: Re: UTF-8 и UTF-16
Отправлено: OKTA от Февраль 13, 2014, 12:54
char* - указатель не на символ, а на символьную строку.......

Что лежит в text и count? и как то, что там лежит, туда кладется?  ;D


Название: Re: UTF-8 и UTF-16
Отправлено: polina89 от Февраль 13, 2014, 13:13
text-это указатель на массив типа char, count-кол-во элементов этого массива. Кладется это все с помощью сигнала и слота) Вот тут вызывается сигнал dataAccepted:

Код:
void Server::startRead()
{
int m=client->bytesAvailable();
char *buffer =new char[client->bytesAvailable()];
client->read(buffer, client->bytesAvailable());
client->close();
emit DataAccepted(buffer,m);


}
А вот это слот для него)))
Код:
void MainWindow::setServerEdit(char* text, qint64 count)
{
QString str,str1;
QByteArray array(text,count);
str="";
for (int i=0; i<count; i++)
{
str1=QObject::trUtf8(text+i);
str+=str1;
}
ui->ServerEdit->setText(str);
}


Название: Re: UTF-8 и UTF-16
Отправлено: polina89 от Февраль 13, 2014, 13:35
Всем большое спасибо, проблема решилась использованием QTextStream и использованием setCodec для UTF-16 :) :) :)


Название: Re: UTF-8 и UTF-16
Отправлено: kambala от Февраль 13, 2014, 15:51
Простите за опечатку, использовала QObject::trUtf8().QObject::trUtf16() не существует
так может надо QString::fromUtf16() использовать?