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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: UTF-8 и UTF-16  (Прочитано 4555 раз)
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)
Мерси!
Записан
carrygun
Гость
« Ответ #1 : Февраль 13, 2014, 12:18 »

Нужно, наверное, посмотреть в сторону QTextCodec.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Февраль 13, 2014, 12:20 »

так может надо QString::fromUtf16() использовать?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
polina89
Гость
« Ответ #3 : Февраль 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);
}
Записан
OKTA
Гость
« Ответ #4 : Февраль 13, 2014, 12:54 »

char* - указатель не на символ, а на символьную строку.......

Что лежит в text и count? и как то, что там лежит, туда кладется?  Смеющийся
« Последнее редактирование: Февраль 13, 2014, 13:01 от OKTA » Записан
polina89
Гость
« Ответ #5 : Февраль 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);
}
Записан
polina89
Гость
« Ответ #6 : Февраль 13, 2014, 13:35 »

Всем большое спасибо, проблема решилась использованием QTextStream и использованием setCodec для UTF-16 Улыбающийся Улыбающийся Улыбающийся
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #7 : Февраль 13, 2014, 15:51 »

Простите за опечатку, использовала QObject::trUtf8().QObject::trUtf16() не существует
так может надо QString::fromUtf16() использовать?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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