Code::Blocks + wxSmith и русские буквы
Posted: Fri Mar 15, 2019 3:23 pm
Здравствуйте.
Знакомлюсь с wxWidgets-3.1.2.
ОС Windows XP Pro SP3 Rus.
Code::Blocks 17.12 с MinGW, все настройки по умолчанию.
Собрал, работает, но когда в wxSmith меню, кнопки и текст в wxTextCtrl написал русскими буквами, при этом в дизайнере нормально, а в запущенной программе отобразились рунические иероглифы.
Поискав ответы, придумал следующие варианты решения:
1. Code::Blocks создаёт все файлы по умолчанию в UTF-8, а wxWidgets, думаю, ожидает в Windows (Вопрос, только в Windows? и в любой Windows ?) кодовую страницу Windows-1251. Перекодировал testMain.cpp в 1251 - получил русские буквы.
2. Решение 1 плохое, при миграции в Linux, думаю, опять придётся перекодировать. да и Юникод в тексте теряется.
Вариант 2: Можно в настройках редактора 'wxSmith settings' отключить "Use I18N for string" и выбрать _Т("") или wxT(""). Тогда при кодовой странице UTF-8 получаю русские буквы.
Это тоже не нравится, то есть надо отключить интернационализацию чтобы получить русские буквы?
Вариант 3.
В файле wx_pch.h добавил
тогда при UTF-8 и включенной I18N всё нормально отображается. Но получаю Warning и решение не очень нравится.
Вариант 4.
Подстановка вручную префикса "L" чтобы получилось _(L"Кнопка"), - тоже даёт русские буквы, но это безсмысленно, wxSmith при обновлении заменит как было.
5. Сборка библиотеки "wxWidgets" с ключом "wxUSE_UNICODE_UTF8 1" и указание дополнительно в приложении "#define wxUSE_UNICODE_WCHAR 0" ситуацию никак не изменило. Русские буквы только в указанных выше случаях.
Вопрос, как решить данную проблему более красиво? "Си" никогда не изучал, и править "wxSmith" чтобы он сразу подставлял, например, "wxString::FromUTF8(s)" сейчас не готов.
Вопрос 2.
Хочу сделать кросс платформенное приложение с использованием SQLite.
В SQLite родной формат UTF-8, поэтому мне предпочтительней чтобы и БД, и ядро wxWidgets, и приложение всё было в UTF-8. То есть мне важна скорость взаимодействия программы и БД, а то что при отображении для пользователя в Windows возможны перекодировки, не важно.
В описании встречал предупреждение что в Windows UTF-8 может не работать, но по мне так всё работает.
Вопрос в том на что надо обращать внимание при использовании ключа wxUSE_UNICODE_UTF8 ?
Знакомлюсь с wxWidgets-3.1.2.
ОС Windows XP Pro SP3 Rus.
Code::Blocks 17.12 с MinGW, все настройки по умолчанию.
Собрал, работает, но когда в wxSmith меню, кнопки и текст в wxTextCtrl написал русскими буквами, при этом в дизайнере нормально, а в запущенной программе отобразились рунические иероглифы.
Поискав ответы, придумал следующие варианты решения:
1. Code::Blocks создаёт все файлы по умолчанию в UTF-8, а wxWidgets, думаю, ожидает в Windows (Вопрос, только в Windows? и в любой Windows ?) кодовую страницу Windows-1251. Перекодировал testMain.cpp в 1251 - получил русские буквы.
2. Решение 1 плохое, при миграции в Linux, думаю, опять придётся перекодировать. да и Юникод в тексте теряется.
Вариант 2: Можно в настройках редактора 'wxSmith settings' отключить "Use I18N for string" и выбрать _Т("") или wxT(""). Тогда при кодовой странице UTF-8 получаю русские буквы.
Это тоже не нравится, то есть надо отключить интернационализацию чтобы получить русские буквы?
Вариант 3.
В файле wx_pch.h добавил
Code: Select all
#ifdef _(s)
#undef _(s)
#endif // _
#define _(s) wxString::FromUTF8(s)
Вариант 4.
Подстановка вручную префикса "L" чтобы получилось _(L"Кнопка"), - тоже даёт русские буквы, но это безсмысленно, wxSmith при обновлении заменит как было.
5. Сборка библиотеки "wxWidgets" с ключом "wxUSE_UNICODE_UTF8 1" и указание дополнительно в приложении "#define wxUSE_UNICODE_WCHAR 0" ситуацию никак не изменило. Русские буквы только в указанных выше случаях.
Вопрос, как решить данную проблему более красиво? "Си" никогда не изучал, и править "wxSmith" чтобы он сразу подставлял, например, "wxString::FromUTF8(s)" сейчас не готов.
Вопрос 2.
Хочу сделать кросс платформенное приложение с использованием SQLite.
В SQLite родной формат UTF-8, поэтому мне предпочтительней чтобы и БД, и ядро wxWidgets, и приложение всё было в UTF-8. То есть мне важна скорость взаимодействия программы и БД, а то что при отображении для пользователя в Windows возможны перекодировки, не важно.
В описании встречал предупреждение что в Windows UTF-8 может не работать, но по мне так всё работает.
Вопрос в том на что надо обращать внимание при использовании ключа wxUSE_UNICODE_UTF8 ?