Название: Свойства на русском языке (для 1с) Отправлено: daorus от Апрель 02, 2011, 20:47 Кто-нибудь уже нашел способ как можно доставать значения свойств на русском языке из 1с? На пхп у меня всё достается, а на qt все, что англоязычное - ок, а как требуется получить свойство русскоязычного реквизита - встрял
Код: QString value = row->dynamicCall("ФИОплательщика").toString(); // исксепшн: такого кракосябры свойтсва нету Я пробовал копаться в сорсах и мне показалось, что там toLatin() слишком часто используется, но действительно ли в нем проблема - хз - страшно править - а то вообще работать перестанет. Может уже кто что придумал? Название: Re: Свойства на русском языке (для 1с) Отправлено: lit-uriy от Апрель 02, 2011, 21:12 а ты пробовал сделать программу с единственной кнопкой, на которой написано "Привет"?
Название: Re: Свойства на русском языке (для 1с) Отправлено: Sahab от Апрель 02, 2011, 22:04 я бы использовал другую надпись на кнопке ;D
Название: Re: Свойства на русском языке (для 1с) Отправлено: madRoger от Апрель 02, 2011, 22:51 Ну что, смотрю, никто не хочет отвечать. Видать, все устали отвечать на этот вопрос. Он достаточно прост.
lit-uriy не зря предложил автору вопроса создать кнопку с надписью на кириллице. Если создать такую кнопку, вместо надписи на ней будут те же кракосябры. Дело в том, что класс QString оперирует двухбайтными символами в формате Unicode. Соответственно, необходимо преобразовать однобайтовые строки к типу QString. Для этого есть несколько методов. Либо использовать метод QString::fromLocal8Bit.(при этом используется системная кодировка). Либо воспользоваться кодеком QTextCodec. Последний более предпочтителен так как его можно использовать для всего проекта сразу. Попробуйте вместо Цитировать row->dynamicCall("ФИОплательщика").toString(); написать row->dynamicCall(QString::fromLocal8Bit("ФИОплательщика"));Либо воспользуйтесь кодеком, например: QTextCodec::setCodecForTr( QTextCodec::codecForName("Windows-1251")); QTextCodec::setCodecForCStrings( QTextCodec::codecForName("Windows-1251")); кодек лучше запихнуть в main.cpp. Название: Re: Свойства на русском языке (для 1с) Отправлено: daorus от Апрель 03, 2011, 09:29 на этот вопрос Возможно я действительно что-то напутал с кодировками, поэтому привожу полный текст теста, может я действительно что-то проглядел. Код: #include <QTextCodec> Теперь запускаем полученное изделие: Код: > test.exe > txt.txt 2>&1 получаем вывод (http://www.prog.org.ru/index.php?action=dlattach;topic=17499.0;attach=3217) Тут же запускаем пхп аналог: Код: > php com.php > php-dump.txt 2>&1 и всё у нас отлично работает - данные извлекаются Код: <? ============================================= Параметры: qt 4.7.2, mingw, windows xp sp3, 1c 8.1, php 5.2.5 кодировка всех исходных файлов, включая *.cpp, *.h, *.php - utf8 Название: Re: Свойства на русском языке (для 1с) Отправлено: lit-uriy от Апрель 03, 2011, 10:01 >>кодировка всех исходных файлов, включая *.cpp, *.h, *.php - utf8
Самый простой способ такой: Код
т.е. все строчки содержащие кириллицу обернуть в QObject::trUtf8(). Может показаться, что trUtf8() нужна только для перевода, однако здесь нам от неё нужна простота записи и преобразование из строкового литерала в кодировке UTF-8 в UTF-16 (используемой внутри QString) Название: Re: Свойства на русском языке (для 1с) Отправлено: daorus от Апрель 03, 2011, 10:39 Самый простой способ такой: Код
т.е. все строчки содержащие кириллицу обернуть в QObject::trUtf8(). Странно, что вы советуете, не проверив прототип dynamicCall(). Вы уверены, что у вас типы совпадают? Название: Re: Свойства на русском языке (для 1с) Отправлено: lit-uriy от Апрель 03, 2011, 11:33 daorus ну приведи QString к Сишной строке через toLocal8bit, Суть-то не в этом. Суть в том, что на винде никто не ждёт символов в UTF-8, а исходник у тебя в UTF-8.
И нужно преобразовать из UTF-8 в CP-1251, самый простой путь - преобразовать UTF-8 в QString (UTF-16), а QString уже к чему угодно. Название: Re: Свойства на русском языке (для 1с) Отправлено: daorus от Апрель 03, 2011, 12:06 на винде никто не ждёт символов в UTF-8, а исходник у тебя в UTF-8 Доказательства этого тезиса есть? Или просто - фантазии на тему? Потому что вот это тоже не работает. Код: const char* cp1251form = cp1251->fromUnicode(str("ФИОплательщика")); Название: Re: Свойства на русском языке (для 1с) Отправлено: lit-uriy от Апрель 03, 2011, 20:32 причём здесь fromUnicode()?
ты сам сказал , что у тебя UTF-8, а не я это с фантазировал: >>кодировка всех исходных файлов, включая *.cpp, *.h, *.php - utf8 |