Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [wx] Компилятор ругается на русские символы, и выдаёт: Illegal byte sequence 
V
    Опции темы
Fabio
Дата 1.10.2008, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.11.2007

Репутация: нет
Всего: нет



Здравствуте!

Помогите решить неприятную проблемку.
Я собрал wxWidgets (debug и release) в unicode.
Пока осваиваюсь с библиотекой и до этого все мои исходники были без строк на русском языке.
Теперь вот решил написать заголовок фрейма по русски и на тебе:
Код

converting to execution character set: Illegal byte sequence

Что делать, как быть? У меня мыслей никаких, а русский ой как нужен smile .
Собирать версии библиотеки без unicode не хочется.
PM   Вверх
Mazzi
Дата 2.10.2008, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: нет
Всего: 21



Я думаю тебе нужно сюда http://forum.vingrad.ru/topic-214051.html


Удачи!


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
Fabio
Дата 2.10.2008, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 (может в другую надо было?), не помогло.
Кто сталкивался с этим, откликнитесь.
PM   Вверх
Любитель
Дата 2.10.2008, 18:25 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Что за компилятор, во-первых?


--------------------
PM MAIL ICQ Skype   Вверх
Fabio
Дата 2.10.2008, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 уже можно
использовать в коде, как угодно.
Помоему так - если я не прав, поправвьте.
Спасибо за внимание!
PM   Вверх
t_rex
Дата 3.10.2008, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 11.10.2006
Где: Украина, г. Запор ожье

Репутация: 2
Всего: 7



В wxWidgets ВСЕ строковые константы должны быть помещены внутрь макросов wxT() или _()
wxT() - для строк, локализация которых не требуется (например имена файлов)
_() - для строк локализация которых требуется (например лэйбы всякие или мессаги)

Код

wxMessageBox(_("Аццке тексте!!! Уиии!!!"));

--------------------
Жизнь не MultiEdit. Undo не сделаешьКросс-платформенное программирование с wxWidgetsБлог о программировании для мобильных устройтсвGoogle Android для программистов и пользователей
PM MAIL WWW ICQ Skype GTalk   Вверх
Fabio
Дата 3.10.2008, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.11.2007

Репутация: нет
Всего: нет



То есть, если закладываться на будующее (возможную локализацию своей проги), то писать лучше так:
wxString str( _( "русский" ) , wxCSConv(wxT("cp1251")) ?
Спасибо за дельный совет!
PM   Вверх
t_rex
Дата 5.10.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 11.10.2006
Где: Украина, г. Запор ожье

Репутация: 2
Всего: 7



Код

wxString str( _( "русский" ) , wxCSConv(wxT("cp1251")) ?

Не, ну зачем так жестоко, достаточно
Код

wxString str( _( "русский" ));

Кодировку менять почти никогда не приходится, ну разве что там для файловых операций и то не всегда. На стадии компиляции оно тебе точно ни к чему.
Просто не забывай пихать все строки внутрь макросов.
--------------------
Жизнь не MultiEdit. Undo не сделаешьКросс-платформенное программирование с wxWidgetsБлог о программировании для мобильных устройтсвGoogle Android для программистов и пользователей
PM MAIL WWW ICQ Skype GTalk   Вверх
Fabio
Дата 9.10.2008, 20:19 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.11.2007

Репутация: нет
Всего: нет



Так в том-то и дело, что если написать без перекодировки, то компилятор останавливается
с выше упомянутой ошибкой на первой-же попавшейся ему строке с НЕ англицкими буквами!
Напомню, мои библиотеки скомпилены с поддержкой UNICODE!
Ясное дело, если перекомпилировать их с опцией UNICODE=0, то со строками будет всё впорядке.
Никак не пойму "физику" процесса взаимодействия GCC и уникодовых библиотек.
На что у него аллергия, блин smile . А так, неспорю, инициализировать каждую строку с перекодировкой -
это жесть.

PS. Есть предчувствие, что мне всётаки придётся перекомпилировать с опцией UNICODE=0

Это сообщение отредактировал(а) Fabio - 9.10.2008, 20:27
PM   Вверх
Любитель
Дата 10.10.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Fabio, ты уверен, что:
Цитата(Fabio @  9.10.2008,  20:19 Найти цитируемый пост)
компилятор останавливается

?

Если это правда, то это абсолютно неважно - с какой версии либ wx ты будешь линковать (юникод или неюникод).


--------------------
PM MAIL ICQ Skype   Вверх
monax
Дата 14.10.2008, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 9.6.2005

Репутация: 1
Всего: 4



Проверь кодировку файла. Скорее всего, она не юникодовская. Файл нужно кодировать в юникоде без BOM.

Применительно к Code::Blocks идешь в Settings->Editor->General settings, там меняешь кодировку (Default encoding when opening files) на utf-8. Создаешь новый проект (не уверен, что старый будет автоматически переконвертирован), пишешь русский текст и радуешься жизни.
--------------------
Лаборатория программиста
PM MAIL WWW ICQ Jabber   Вверх
Fabio
Дата 14.10.2008, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 9.11.2007

Репутация: нет
Всего: нет



Спасибо, monax, помогло, и проект новый создавать не пришлось, просто переоткрыл
все файлы в проекте и редактор их автоматом сконвертировал в UTF-8 "без BOM" - не знаю,
что это за BOM, но Notepad++ именно так и показал кодировку)
Цитата

... и радуешься жизни

эт точно smile
PM   Вверх
Static
Дата 10.11.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 6.11.2008

Репутация: нет
Всего: 2



Столкнулся с той же проблемой - Illegal byte sequence при использовании кириллических надписей на контролах (wxButton например)
Изменил кодировку едитора по умолчанию на utf-8 - вроде заработало... но:
если я меняю что-либо на фрейме (похоже, что свойства парента контрола) опять может выскочить ошибка. А может и не выскочить  smile:
Переоткрытие проекта не помогает :(
У кого-нить есть идеи по поводу?
--------------------
Я не настолько безнадежен, как кажется...
PM MAIL   Вверх
Static
Дата 12.11.2008, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 6.11.2008

Репутация: нет
Всего: 2



Разобрался.
Project->Build targets->Compiler->defines: WX_USE_UNICODE
как оно вобще работало  smile ?
--------------------
Я не настолько безнадежен, как кажется...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1020 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.