![]() |
|
![]() ![]() ![]() |
|
KUL |
|
||||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 22.7.2013 Репутация: нет Всего: нет |
Здравствуйте.
Имеются исходники в формате utf-8
При выполнении имеется сообщение об ошибке
Т.е. 1С сервер сообщает какую-то ошибку на русском языке. Вопрос - как сделать вывод ошибок, чтобы отображались русские буквы? Я предполагаю что нужно с кодировкой "по играться", но как переопределить глобальный вывод ошибок? Может есть какой-то глобальный флаг? |
||||
|
|||||
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
1). Попробуйте trUtf8.
2). Куда выводится сообщение? Если в консоль, то нужно настроить саму консоль на кодировку utf8, либо конвертировать строки в необходимую кодировку с помощью QTextCodec. |
|||
|
||||
KUL |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 22.7.2013 Репутация: нет Всего: нет |
Guinness, пробовал, не получилось. Да, в консоль вывожу.
1 Эксперимент
Результат
2 Эксперимент Кодировка main.cpp utf-8
Результат
Вывод - то ли дебагу Qt 5 плевать на глабольные настройки кодировки, то ли QAxBase классу ... Пробежался по докам QAxBase, ничего про кодировку отладочных сообщений не увидел ![]() |
||||||||
|
|||||||||
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
Так а 1С Вам в какой кодировке присылает данные?
Я сначал не вдуплил в вопрос. В своё время, когда я писал smtp-клиент, если открывать поток(сокет), с кодировкой, несоответствующей передаваемому тексту, будут выдаваться вот такие знаки вопросов. И ничего Вы с ними не сделаете. Соответственно, нужно открывать поток в кодировке, которой Вам передает 1С. |
|||
|
||||
KUL |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 22.7.2013 Репутация: нет Всего: нет |
Но это же не поток, это же получается просто как использование api дллэлки, которая просто указатель отдаёт. Хотя ...
Если честно с 1С совсем не работал, если подскажите как посмотреть это в 1С, будет круто ![]() |
|||
|
||||
Guinness |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
Так, давайте по порядку. Что и как Вы делаете? Ошибка происходит при попытке создать нового пользователя? Где обрабатывается ошибка? Как происходит её вывод?
Я тоже, поэтому помочь Вам не смогу с этим. Однако, Вы можете поинтересоваться у человека, который настраивал сервер, в какой кодировке хранятся данные на нём и вообще какие кодировки он использует. В MySQL, к примеру, есть разные виды кодировок для таблиц, БД, соединений с БД, консоли и т.п. Это все можно узнать экспериментальным путём, спомощью перебора кодировок, но это если не лень. Попробуйте сделать это таким образом:
Это сообщение отредактировал(а) Guinness - 25.7.2013, 07:36 |
||||||
|
|||||||
KUL |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 22.7.2013 Репутация: нет Всего: нет |
Решил поставить qt 4.8 для старых функций класса QTextCodec, поставил, делаю
main.cpp в кодировке UTF-8
Реузьтат
Вычитал, что 1С сервер через COM принимает кодировкой CP1251 а результат возвращает UTF-8. Делаю main.cpp в кодировке UTF-8
Результат:
Почему так происходит? зы В 1С есть к русским именам аналоги на английском, т.е. вместо ПользователиИнформационнойБазы можно написать InfoBaseUsers и всё отлично получится даже в первом варианте. НО!!! Люди которые писали конфигуратор, использовали для обозначения объектов только русские имена ... Поэтому в дальнейшем я например не смогу взять и посмотреть права пользователя (специфичные для нашего конфигуратора). |
||||||||
|
|||||||||
bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Тут ошибка. tr ты передаешь строку в utf8. А ждет она cp1251. Убери setCodecForTr вообще. И делай так:
А разработчикам 1C надо яйца оторвать за использование кириллицы в синтаксисе языка и названиях полей БД |
||||
|
|||||
KUL |
|
||||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 22.7.2013 Репутация: нет Всего: нет |
bsa, сделал по вашей рекомендации:
main.cpp utb-8 без BOM
Результат
|
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
KUL, есть подозрение, что ты что-то не до конца настроил при подключении.
|
|||
|
||||
KUL |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 22.7.2013 Репутация: нет Всего: нет |
bsa насчёт кодировки кончено интересно. Вот какие примерно мысли посетили:
Исходники в utf-8, qt4.8
Как можно корректно (да даже хоть по символьно!) перегнать кустринг в чар? Так str3[0] не получится, т.к. QChar получается. А str3[0].toAscii().data() получается каша из кракозябр ... Это сообщение отредактировал(а) KUL - 9.8.2013, 07:46 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
KUL, это делается через TextCodec. Я ранее показал уже как.
И не используй tr() тут. Она тебе не нужна! Используй QString::fromUtf8() для получения QString, а затем QTextCodec для преобразования в cp1251 (windows-1251). А еще лучше сделай специальный файл, в котором будешь хранить все эти поля. Загружай его в карту (std::map<int,std::string>) и пользуйся. |
|||
|
||||
KUL |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 22.7.2013 Репутация: нет Всего: нет |
Всё перепробовал, уже как только не извращался, не хочет Qt русский текст понимать. Точнее ActiveQT модуль и его компоненты ...
На Visual Basic 2010 вообще всё чудесно работает
Прям вот хоть бери и учи этот закрытопроприетарнодотнетовский VisualBasic ;( ... |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
KUL, посмотри в коде программы (скомпилированной), в какой кодировке там строки. Посмотри в отладке, правильные ли данные генерит toCp1251. Еще попробуй все эти русские строки записать в файл, а при старте программы читать в переменные (QByteArray) и используй при необходимости.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |