Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передача юникода по сети 
:(
    Опции темы
hexzo
Дата 30.9.2011, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



При передаче используется класс QByteArray.

Кутя же при такой операции, юникод превращает в cp1251 зачем-то.
Код

QString message;
bytearray.append(message);

Ну во всяком случае если на принимающей стороне сделать конвертацию cp1251 to UTF8, то получается русский текст. Но это же не вариант, что например будет с символами которые не представлены в cp1251.

Это сообщение отредактировал(а) hexzo - 30.9.2011, 10:35
PM MAIL   Вверх
bsa
Дата 30.9.2011, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



hexzo, а документацию почитать слабо?
Я бы написал так:
Код
QString message;
...
QByteArray byteArray;
...
byteArray += message.toUtf8();
...


Это сообщение отредактировал(а) bsa - 30.9.2011, 10:37
PM   Вверх
hexzo
Дата 30.9.2011, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



bsa
Цитата

hexzo, а документацию почитать слабо?

Какой раздел?

Цитата

Я бы написал так:

А как обратно извлечь из QByteArray юникод?

Это сообщение отредактировал(а) hexzo - 30.9.2011, 10:58
PM MAIL   Вверх
hexzo
Дата 30.9.2011, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Такой способ не работает.
Код

QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QString result = codec->toUnicode(bytearray);

PM MAIL   Вверх
hexzo
Дата 30.9.2011, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



А проблема вовсе оказалась в другом.

Я не понял, почему юникодовый строковый литерал из юникодового документа нужно конвертировать в юникод, но иначе кракозябры.
Код

string s= QString::fromUtf8("русский язык")

PM MAIL   Вверх
math64
Дата 30.9.2011, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Тут на эту тему уже две страницы в теме "Абракадабра в ComboBox" наплодили.
QString::fromUtf8() или tr()/trUtf8() нужно использовать независимо от того где строловая константа нужна - в GUI или в сети или где-то ещё 
PM   Вверх
bsa
Дата 30.9.2011, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Цитата(hexzo @  30.9.2011,  11:57 Найти цитируемый пост)
Какой раздел?
QString
Цитата(hexzo @  30.9.2011,  12:38 Найти цитируемый пост)
Такой способ не работает.
Код
QString message = QString::fromUtf8(byteArray.constData(), byteArray.size());


Добавлено через 5 минут и 15 секунд
Цитата(hexzo @  30.9.2011,  13:36 Найти цитируемый пост)
Я не понял, почему юникодовый строковый литерал из юникодового документа нужно конвертировать в юникод, но иначе кракозябры.

Потому что когда был придуман язык С (предок С++) о русских (как и о других национальностях) никто не думал. А потом, у тебя литерал не юникодовый - просто набор байтов. Юникодовым он будет если ты добавишь символ L перед строкой: QString = L"русский язык"; Без этого применяется кодек заданный QTextCodec::setCodecForCStrings().
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0562 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.