| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [wx] Компилятор ругается на русские символы |
| Автор: Fabio 1.10.2008, 22:36 | ||
| Здравствуте! Помогите решить неприятную проблемку. Я собрал wxWidgets (debug и release) в unicode. Пока осваиваюсь с библиотекой и до этого все мои исходники были без строк на русском языке. Теперь вот решил написать заголовок фрейма по русски и на тебе:
Что делать, как быть? У меня мыслей никаких, а русский ой как нужен Собирать версии библиотеки без unicode не хочется. |
| Автор: Mazzi 2.10.2008, 08:47 |
| Я думаю тебе нужно сюда http://forum.vingrad.ru/topic-214051.html Удачи! |
| Автор: Fabio 2.10.2008, 16:53 |
| Спасибо, но это не совсем то, что у меня (тем более Qt). Я когда исходный текст пишу, то компилятор спотыкается на строках, где ему встречаются русские символы и выдаёт ошибку converting to execution character set: Illegal byte sequence С внешним миром моя программа ни как не связана - всё внутри исходника! Среда программирования у меня WinXP SP3 + Code::Blocks + MinGW + wxWidgets v2.8.9 unicode. Пробовал менять кодировку символов в редакторе Code::Blocks, не помогло. Пробовал перекодировать сам сpp-шник в UTF-8 (может в другую надо было?), не помогло. Кто сталкивался с этим, откликнитесь. |
| Автор: Любитель 2.10.2008, 18:25 |
| Что за компилятор, во-первых? |
| Автор: Fabio 2.10.2008, 18:45 | ||
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 3.10.2008, 13:06 | ||
| В wxWidgets ВСЕ строковые константы должны быть помещены внутрь макросов wxT() или _() wxT() - для строк, локализация которых не требуется (например имена файлов) _() - для строк локализация которых требуется (например лэйбы всякие или мессаги)
|
| Автор: Fabio 3.10.2008, 18:53 |
| То есть, если закладываться на будующее (возможную локализацию своей проги), то писать лучше так: wxString str( _( "русский" ) , wxCSConv(wxT("cp1251")) ? Спасибо за дельный совет! |
| Автор: t_rex 5.10.2008, 21:39 | ||||
Не, ну зачем так жестоко, достаточно
Кодировку менять почти никогда не приходится, ну разве что там для файловых операций и то не всегда. На стадии компиляции оно тебе точно ни к чему. Просто не забывай пихать все строки внутрь макросов. |
| Автор: Fabio 9.10.2008, 20:19 |
| Так в том-то и дело, что если написать без перекодировки, то компилятор останавливается с выше упомянутой ошибкой на первой-же попавшейся ему строке с НЕ англицкими буквами! Напомню, мои библиотеки скомпилены с поддержкой UNICODE! Ясное дело, если перекомпилировать их с опцией UNICODE=0, то со строками будет всё впорядке. Никак не пойму "физику" процесса взаимодействия GCC и уникодовых библиотек. На что у него аллергия, блин это жесть. PS. Есть предчувствие, что мне всётаки придётся перекомпилировать с опцией UNICODE=0 |
| Автор: Любитель 10.10.2008, 11:22 |
| Fabio, ты уверен, что: ? Если это правда, то это абсолютно неважно - с какой версии либ wx ты будешь линковать (юникод или неюникод). |
| Автор: monax 14.10.2008, 11:04 |
| Проверь кодировку файла. Скорее всего, она не юникодовская. Файл нужно кодировать в юникоде без BOM. Применительно к Code::Blocks идешь в Settings->Editor->General settings, там меняешь кодировку (Default encoding when opening files) на utf-8. Создаешь новый проект (не уверен, что старый будет автоматически переконвертирован), пишешь русский текст и радуешься жизни. |
| Автор: Fabio 14.10.2008, 20:01 | ||
| Спасибо, monax, помогло, и проект новый создавать не пришлось, просто переоткрыл все файлы в проекте и редактор их автоматом сконвертировал в UTF-8 "без BOM" - не знаю, что это за BOM, но Notepad++ именно так и показал кодировку)
эт точно |
| Автор: Static 10.11.2008, 11:29 |
| Столкнулся с той же проблемой - Illegal byte sequence при использовании кириллических надписей на контролах (wxButton например) Изменил кодировку едитора по умолчанию на utf-8 - вроде заработало... но: если я меняю что-либо на фрейме (похоже, что свойства парента контрола) опять может выскочить ошибка. А может и не выскочить Переоткрытие проекта не помогает :( У кого-нить есть идеи по поводу? |
| Автор: Static 12.11.2008, 10:06 |
| Разобрался. Project->Build targets->Compiler->defines: WX_USE_UNICODE как оно вобще работало |