![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
sibmail |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 63 Регистрация: 20.3.2009 Пользователь №: 626 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Пример кода
... QTextCodec *codec=QTextCodec::codecForName("CP1251"); QTextCodec::setCodecForTr(codec); QTextCodec::setCodecForCStrings(codec); QTextCodec::setCodecForLocale(codec); ... ... QTextCodec *codec_send = QTextCodec::codecForName("IBM-866"); QString mes_send="ШИШ; emit message (mes_send); //выводит "ШИШ" mes_send=codec_send->fromUnicode(mes_send); emit message (mes_send); //что то там выводит... mes_send=codec_send->toUnicode(mes_send); emit message (mes_send); //выводит "?И?" подскажите что делать? (qt3.3) Сообщение отредактировал sibmail - 20.4.2010, 13:46 |
|
|
![]() |
SABROG |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
sibmail |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 63 Регистрация: 20.3.2009 Пользователь №: 626 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
еще кто что посоветует?
|
|
|
SABROG |
![]()
Сообщение
#4
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Вам уже вчера ответили на другом форуме, что вы глупость написали тут:
fromUnicode() возвращает QByteArray, а mes_send - QString. Происходит неявное преобразование QByteArray в QString, при котором используется установленный кодек codecForCStrings, то есть cp1251. Вот и подумайте, что может получится, если попытаться преобразовать текст в кодировке cp866 в Unicode заставляя думать кодек, что это кодировка cp1251. Цитата подскажите что делать? Поставить задачу конкретней. Даже если решить вопрос с преобразованием кодировок туда и обратно, то может остаться проблема с выводом текста, где может опять же происходить неявное кодирование. Чтобы понять будет ли там проблема нужно смотреть код слота на сигнал message. Но могу уже сейчас сказать, что QString в качестве параметра для сигнала уже не подходит для вывода текста в разных кодировках. В QString всегда Unicode. |
|
|
sibmail |
![]()
Сообщение
#5
|
Студент ![]() Группа: Участник Сообщений: 63 Регистрация: 20.3.2009 Пользователь №: 626 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Детально: в программе формируются строки для посылки, строка состоит из ранзых блоков (в зависимости от протокола).
Я не могу перекодировать все данные перед отправкой, т.к. в служебной части строки есть данные которые нельзя менять. ... QTextCodec *codec=QTextCodec::codecForName("CP1251"); QTextCodec::setCodecForTr(codec); QTextCodec::setCodecForCStrings(codec); QTextCodec::setCodecForLocale(codec); ... ... QString mes_send1="12345; QString mes_send2="ШИШ2; QString mes_send3="ШИШ3; QTextCodec *codec_send = QTextCodec::codecForName("IBM-866"); mes_send2=codec_send->fromUnicode(mes_send2); mes_send3=codec_send->fromUnicode(mes_send3); QString array_Strings[n_devices][1]; array_Strings[0][0]=mes_send2; array_Strings[1][0]=mes_send3; QString MES_SEND=mes_send1+array_Strings[0][0]+array_Strings[1][0]; //часть строки должна быть в IBM-866 m_psocket->writeBlock(MES_SEND, MES_SEND.length()); |
|
|
SABROG |
![]()
Сообщение
#6
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Вместо массива строк используй QByteArray и миксуй там кодировки как тебе заблогарассудится.
|
|
|
sibmail |
![]()
Сообщение
#7
|
Студент ![]() Группа: Участник Сообщений: 63 Регистрация: 20.3.2009 Пользователь №: 626 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Вместо массива строк используй QByteArray и миксуй там кодировки как тебе заблогарассудится. подскажите как в qt3 сразу два QByteArray QString str1="ШИШ"; QByteArray ba1, ba2; ba1="12345"+QCString(str1); ba2="67890"; ba1=ba1+ba2; // - ВОТ ЗДЕСЬ МНЕ НАДО СЛОЖИТЬ. НА ЭТО ba1=ba1+ba2 - РУГАЕТСЯ |
|
|
SABROG |
![]()
Сообщение
#8
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Никак QByteArray в Qt3 это обычный typedef статический массив QMemArray<char>. Для динамики нужно использовать QValueVector<char>. Но тебе виднее, я начинал изучение с Qt4.
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 30.5.2025, 7:09 |