| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Qt определение вывода ошибок в определенной кодиро |
| Автор: KUL 24.7.2013, 03:07 | ||||
| Здравствуйте. Имеются исходники в формате utf-8
При выполнении имеется сообщение об ошибке
Т.е. 1С сервер сообщает какую-то ошибку на русском языке. Вопрос - как сделать вывод ошибок, чтобы отображались русские буквы? Я предполагаю что нужно с кодировкой "по играться", но как переопределить глобальный вывод ошибок? Может есть какой-то глобальный флаг? |
| Автор: Guinness 24.7.2013, 07:11 |
| 1). Попробуйте trUtf8. 2). Куда выводится сообщение? Если в консоль, то нужно настроить саму консоль на кодировку utf8, либо конвертировать строки в необходимую кодировку с помощью QTextCodec. |
| Автор: KUL 24.7.2013, 13:00 | ||||||||
| Guinness, пробовал, не получилось. Да, в консоль вывожу. 1 Эксперимент
Результат
2 Эксперимент Кодировка main.cpp utf-8
Результат
Вывод - то ли дебагу Qt 5 плевать на глабольные настройки кодировки, то ли QAxBase классу ... Пробежался по докам QAxBase, ничего про кодировку отладочных сообщений не увидел |
| Автор: Guinness 24.7.2013, 13:20 |
| Так а 1С Вам в какой кодировке присылает данные? Я сначал не вдуплил в вопрос. В своё время, когда я писал smtp-клиент, если открывать поток(сокет), с кодировкой, несоответствующей передаваемому тексту, будут выдаваться вот такие знаки вопросов. И ничего Вы с ними не сделаете. Соответственно, нужно открывать поток в кодировке, которой Вам передает 1С. |
| Автор: KUL 24.7.2013, 15:36 |
| Но это же не поток, это же получается просто как использование api дллэлки, которая просто указатель отдаёт. Хотя ... Если честно с 1С совсем не работал, если подскажите как посмотреть это в 1С, будет круто |
| Автор: KUL 31.7.2013, 07:16 | ||||||||
| Решил поставить qt 4.8 для старых функций класса QTextCodec, поставил, делаю main.cpp в кодировке UTF-8
Реузьтат
Вычитал, что 1С сервер через COM принимает кодировкой CP1251 а результат возвращает UTF-8. Делаю main.cpp в кодировке UTF-8
Результат:
Почему так происходит? зы В 1С есть к русским именам аналоги на английском, т.е. вместо ПользователиИнформационнойБазы можно написать InfoBaseUsers и всё отлично получится даже в первом варианте. НО!!! Люди которые писали конфигуратор, использовали для обозначения объектов только русские имена ... Поэтому в дальнейшем я например не смогу взять и посмотреть права пользователя (специфичные для нашего конфигуратора). |
| Автор: bsa 31.7.2013, 09:57 | ||||
Тут ошибка. tr ты передаешь строку в utf8. А ждет она cp1251. Убери setCodecForTr вообще. И делай так:
А разработчикам 1C надо яйца оторвать за использование кириллицы в синтаксисе языка и названиях полей БД |
| Автор: KUL 1.8.2013, 06:53 | ||||
| bsa, сделал по вашей рекомендации: main.cpp utb-8 без BOM
Результат
|
| Автор: bsa 1.8.2013, 11:19 |
| KUL, есть подозрение, что ты что-то не до конца настроил при подключении. |
| Автор: KUL 9.8.2013, 07:45 | ||
| bsa насчёт кодировки кончено интересно. Вот какие примерно мысли посетили: Исходники в utf-8, qt4.8
Как можно корректно (да даже хоть по символьно!) перегнать кустринг в чар? Так str3[0] не получится, т.к. QChar получается. А str3[0].toAscii().data() получается каша из кракозябр ... |
| Автор: bsa 9.8.2013, 12:25 |
| KUL, это делается через TextCodec. Я ранее показал уже как. И не используй tr() тут. Она тебе не нужна! Используй QString::fromUtf8() для получения QString, а затем QTextCodec для преобразования в cp1251 (windows-1251). А еще лучше сделай специальный файл, в котором будешь хранить все эти поля. Загружай его в карту (std::map<int,std::string>) и пользуйся. |
| Автор: KUL 13.8.2013, 04:49 | ||
| Всё перепробовал, уже как только не извращался, не хочет Qt русский текст понимать. Точнее ActiveQT модуль и его компоненты ... На Visual Basic 2010 вообще всё чудесно работает
Прям вот хоть бери и учи этот закрытопроприетарнодотнетовский VisualBasic ;( ... |
| Автор: bsa 14.8.2013, 11:48 |
| KUL, посмотри в коде программы (скомпилированной), в какой кодировке там строки. Посмотри в отладке, правильные ли данные генерит toCp1251. Еще попробуй все эти русские строки записать в файл, а при старте программы читать в переменные (QByteArray) и используй при необходимости. |