![]() |
|
![]() ![]() ![]() |
|
Fabio |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 9.11.2007 Репутация: нет Всего: нет |
Здравствуте!
Помогите решить неприятную проблемку. Я собрал wxWidgets (debug и release) в unicode. Пока осваиваюсь с библиотекой и до этого все мои исходники были без строк на русском языке. Теперь вот решил написать заголовок фрейма по русски и на тебе:
Что делать, как быть? У меня мыслей никаких, а русский ой как нужен ![]() Собирать версии библиотеки без unicode не хочется. |
|||
|
||||
Mazzi |
|
|||
![]() Правильный ![]() ![]() Профиль Группа: Комодератор Сообщений: 825 Регистрация: 3.4.2003 Репутация: нет Всего: 21 |
-------------------- Мне нужны помощники. |
|||
|
||||
Fabio |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 9.11.2007 Репутация: нет Всего: нет |
Спасибо, но это не совсем то, что у меня (тем более Qt).
Я когда исходный текст пишу, то компилятор спотыкается на строках, где ему встречаются русские символы и выдаёт ошибку converting to execution character set: Illegal byte sequence С внешним миром моя программа ни как не связана - всё внутри исходника! Среда программирования у меня WinXP SP3 + Code::Blocks + MinGW + wxWidgets v2.8.9 unicode. Пробовал менять кодировку символов в редакторе Code::Blocks, не помогло. Пробовал перекодировать сам сpp-шник в UTF-8 (может в другую надо было?), не помогло. Кто сталкивался с этим, откликнитесь. |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Что за компилятор, во-первых?
|
|||
|
||||
Fabio |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 9.11.2007 Репутация: нет Всего: нет |
D:\>gcc --version gcc (GCC) 3.4.5 (mingw-vista special r3) Copyright © 2004 Free Software Foundation, Inc. Порывшись в справке по wxWidgets, решил проблемку сам. Вместо wxString str(wxT("текст русскими буквами")) нужно писать вот так: wxString str("русский", wxCSConv(wxT("cp1251")) и переменную str уже можно использовать в коде, как угодно. Помоему так - если я не прав, поправвьте. Спасибо за внимание! |
|||
|
||||
t_rex |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 11.10.2006 Где: Украина, г. Запор ожье Репутация: 2 Всего: 7 |
В wxWidgets ВСЕ строковые константы должны быть помещены внутрь макросов wxT() или _()
wxT() - для строк, локализация которых не требуется (например имена файлов) _() - для строк локализация которых требуется (например лэйбы всякие или мессаги)
--------------------
Жизнь не MultiEdit. Undo не сделаешьКросс-платформенное программирование с wxWidgetsБлог о программировании для мобильных устройтсвGoogle Android для программистов и пользователей |
|||
|
||||
Fabio |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 9.11.2007 Репутация: нет Всего: нет |
То есть, если закладываться на будующее (возможную локализацию своей проги), то писать лучше так:
wxString str( _( "русский" ) , wxCSConv(wxT("cp1251")) ? Спасибо за дельный совет! |
|||
|
||||
t_rex |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 11.10.2006 Где: Украина, г. Запор ожье Репутация: 2 Всего: 7 |
Не, ну зачем так жестоко, достаточно
Кодировку менять почти никогда не приходится, ну разве что там для файловых операций и то не всегда. На стадии компиляции оно тебе точно ни к чему. Просто не забывай пихать все строки внутрь макросов. --------------------
Жизнь не MultiEdit. Undo не сделаешьКросс-платформенное программирование с wxWidgetsБлог о программировании для мобильных устройтсвGoogle Android для программистов и пользователей |
||||
|
|||||
Fabio |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 9.11.2007 Репутация: нет Всего: нет |
Так в том-то и дело, что если написать без перекодировки, то компилятор останавливается
с выше упомянутой ошибкой на первой-же попавшейся ему строке с НЕ англицкими буквами! Напомню, мои библиотеки скомпилены с поддержкой UNICODE! Ясное дело, если перекомпилировать их с опцией UNICODE=0, то со строками будет всё впорядке. Никак не пойму "физику" процесса взаимодействия GCC и уникодовых библиотек. На что у него аллергия, блин ![]() это жесть. PS. Есть предчувствие, что мне всётаки придётся перекомпилировать с опцией UNICODE=0 Это сообщение отредактировал(а) Fabio - 9.10.2008, 20:27 |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Fabio, ты уверен, что:
? Если это правда, то это абсолютно неважно - с какой версии либ wx ты будешь линковать (юникод или неюникод). |
|||
|
||||
monax |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 9.6.2005 Репутация: 1 Всего: 4 |
Проверь кодировку файла. Скорее всего, она не юникодовская. Файл нужно кодировать в юникоде без BOM.
Применительно к Code::Blocks идешь в Settings->Editor->General settings, там меняешь кодировку (Default encoding when opening files) на utf-8. Создаешь новый проект (не уверен, что старый будет автоматически переконвертирован), пишешь русский текст и радуешься жизни. --------------------
Лаборатория программиста |
|||
|
||||
Fabio |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 9.11.2007 Репутация: нет Всего: нет |
Спасибо, monax, помогло, и проект новый создавать не пришлось, просто переоткрыл
все файлы в проекте и редактор их автоматом сконвертировал в UTF-8 "без BOM" - не знаю, что это за BOM, но Notepad++ именно так и показал кодировку)
эт точно ![]() |
|||
|
||||
Static |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 6.11.2008 Репутация: нет Всего: 2 |
Столкнулся с той же проблемой - Illegal byte sequence при использовании кириллических надписей на контролах (wxButton например)
Изменил кодировку едитора по умолчанию на utf-8 - вроде заработало... но: если я меняю что-либо на фрейме (похоже, что свойства парента контрола) опять может выскочить ошибка. А может и не выскочить ![]() Переоткрытие проекта не помогает :( У кого-нить есть идеи по поводу? --------------------
Я не настолько безнадежен, как кажется... |
|||
|
||||
Static |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 6.11.2008 Репутация: нет Всего: 2 |
Разобрался.
Project->Build targets->Compiler->defines: WX_USE_UNICODE как оно вобще работало ![]() --------------------
Я не настолько безнадежен, как кажется... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |