m_locale.Init(wxLANGUAGE_RUSSIAN) Windows-10

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
reddeer
In need of some credit
In need of some credit
Posts: 5
Joined: Tue May 14, 2019 12:17 pm

m_locale.Init(wxLANGUAGE_RUSSIAN) Windows-10

Post by reddeer » Tue May 14, 2019 12:43 pm

Здравствуйте, коллеги.

Столкнулся с такой проблемой. В Windows-10, Visual Studio 2017 никак не удаётся вывести кириллицу в программе. В настройках проекта выбран "Use Unicode Character Set", wxWidgets 3.1.2,

в программе

Code: Select all

wxLocale m_locale;
    ...
    if (!m_locale.Init(wxLANGUAGE_RUSSIAN))
    {
        wxLogError(_T("This language is not supported by the system."));
        return false;
    }
отрабатывает без ошибок, т.е. wxLANGUAGE_RUSSIAN находит и устанавливает, я правильно понимаю?

Уже пробовал и
_T(""), _wxT(""), _(L""), оставлял просто текст. Не помогает, выводит крокозябры.
Подскажите, pls, в какую сторону копать?

PS В Ubuntu 18.04 этот же код работает как надо.

Kvaz1r
Experienced Solver
Experienced Solver
Posts: 97
Joined: Tue Jun 07, 2016 1:07 pm

Re: m_locale.Init(wxLANGUAGE_RUSSIAN) Windows-10

Post by Kvaz1r » Tue May 14, 2019 2:43 pm

Здравствуйте.
Возможно проблема в кодировке исходных файлов, хотя нужно проверить чтобы wxWidgets была собрана с поддержкой UNICODE.

ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 3273
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: m_locale.Init(wxLANGUAGE_RUSSIAN) Windows-10

Post by ONEEYEMAN » Tue May 14, 2019 2:44 pm

Dobrogo vremeni sutok,
A "internat" primer rabotaet?
I esche - chto znachit - "ne rabotaet"? Ne nahodit fajla s perevodami? Fajl nahodit no ne nahodit perevoda?
Ili ge prosto ne vyvodit stroku zakodirovannuju v programme?

Da, vot esche - biblioteka i proekt sobiralis' s opredelenijami "UNICODE" i "_UNICODE"? Kak v primerah?

Spasibo.

reddeer
In need of some credit
In need of some credit
Posts: 5
Joined: Tue May 14, 2019 12:17 pm

Re: m_locale.Init(wxLANGUAGE_RUSSIAN) Windows-10

Post by reddeer » Thu May 16, 2019 9:16 am

Kvaz1r wrote:
Tue May 14, 2019 2:43 pm
Здравствуйте.
Возможно проблема в кодировке исходных файлов, хотя нужно проверить чтобы wxWidgets была собрана с поддержкой UNICODE.
В скачанном установшике (Windows Installer) среди прочих был файл, который билдит всю библиотеку: wx_vc15.sln, в настройках которого в Visual Studio 2017 выставлено "Use Unicode Character Set". Т.е. по идее собрано всё с поддержкой Unicode.

reddeer
In need of some credit
In need of some credit
Posts: 5
Joined: Tue May 14, 2019 12:17 pm

Re: m_locale.Init(wxLANGUAGE_RUSSIAN) Windows-10

Post by reddeer » Thu May 16, 2019 9:58 am

ONEEYEMAN wrote:
Tue May 14, 2019 2:44 pm
Dobrogo vremeni sutok,
A "internat" primer rabotaet?
I esche - chto znachit - "ne rabotaet"? Ne nahodit fajla s perevodami? Fajl nahodit no ne nahodit perevoda?
Ili ge prosto ne vyvodit stroku zakodirovannuju v programme?
Да, пример работает. Но там используются файлы переводов, у меня же прога одноязычная, т.е. я просто в программе использую русские символы. И Ubuntu это позволяет. В Windows нашёл какое-то некрасивое решение: файл сохраняю в ASCII, потом VS перекодирует в UTF, в выводе ставлю L"..." или wxT(".."), тогда выводит корректно.

А хочется как Linux: просто, без макросов что-бы работало.
ONEEYEMAN wrote:
Tue May 14, 2019 2:44 pm
Da, vot esche - biblioteka i proekt sobiralis' s opredelenijami "UNICODE" i "_UNICODE"? Kak v primerah?
В Windows для Visual Studio сборка библиотеки находится в файле *.sln, в ней - проекты, в настройках каждого из них есть параметр Character Set = "Use Unicode Character Set". Это ведь, надеюсь, то, что надо?


Спасибо, парни, что откликнулись!

Kvaz1r
Experienced Solver
Experienced Solver
Posts: 97
Joined: Tue Jun 07, 2016 1:07 pm

Re: m_locale.Init(wxLANGUAGE_RUSSIAN) Windows-10

Post by Kvaz1r » Thu May 16, 2019 10:12 am

Так и Windows позволяет, я в VS без всяких макросов использую кириллицу.

Что еще может быть...посмотрите установлен ли _UNICODE в определениях препроцессора(Проект -> Свойства->Свойства конфигурации -> C/C++ -> Препроцессор).

Если стоит попробовать принудительно сохранить в utf8 с помощью другого редактора и сказать VS ожидать именно такую кодировку. Если заработает то надо искать глобальные настройки чтобы VS всегда сохраняла в юникод.

reddeer
In need of some credit
In need of some credit
Posts: 5
Joined: Tue May 14, 2019 12:17 pm

Re: m_locale.Init(wxLANGUAGE_RUSSIAN) Windows-10

Post by reddeer » Thu May 16, 2019 12:00 pm

Kvaz1r wrote:
Thu May 16, 2019 10:12 am
Так и Windows позволяет, я в VS без всяких макросов использую кириллицу.

Что еще может быть...посмотрите установлен ли _UNICODE в определениях препроцессора(Проект -> Свойства->Свойства конфигурации -> C/C++ -> Препроцессор).

Если стоит попробовать принудительно сохранить в utf8 с помощью другого редактора и сказать VS ожидать именно такую кодировку. Если заработает то надо искать глобальные настройки чтобы VS всегда сохраняла в юникод.
Да, _UNICODE был установлен. Пересобрал библиотеку с ключом /utf-8, в другом редакторе сохранил программку в utf-8, в приложении закомментил:

Code: Select all

#pragma execution_character_set("utf-8")
,
и всё заработало!

Не до конца понимаю, почему пришлось убирать директиву

Code: Select all

#pragma...
, не иначе как двойное перекодирование? Но в таком варианте работает. Спасибо!

Kvaz1r
Experienced Solver
Experienced Solver
Posts: 97
Joined: Tue Jun 07, 2016 1:07 pm

Re: m_locale.Init(wxLANGUAGE_RUSSIAN) Windows-10

Post by Kvaz1r » Thu May 16, 2019 1:37 pm

reddeer wrote:
Thu May 16, 2019 12:00 pm
Не до конца понимаю, почему пришлось убирать директиву

Code: Select all

#pragma...
, не иначе как двойное перекодирование? Но в таком варианте работает. Спасибо!
Скорее всего. Ни разу эту директиву раньше не встречал, но документация говорит, что она уже устаревшая:
This compiler directive is obsolete starting in Visual Studio 2015 Update 2. We recommend that you use the /execution-charset:utf-8 or /utf-8 compiler options together with using the u8 prefix on narrow character and string literals that contain extended characters.

reddeer
In need of some credit
In need of some credit
Posts: 5
Joined: Tue May 14, 2019 12:17 pm

Re: m_locale.Init(wxLANGUAGE_RUSSIAN) Windows-10

Post by reddeer » Thu May 16, 2019 2:46 pm

Kvaz1r wrote:
Thu May 16, 2019 1:37 pm
reddeer wrote:
Thu May 16, 2019 12:00 pm
Не до конца понимаю, почему пришлось убирать директиву

Code: Select all

#pragma...
, не иначе как двойное перекодирование? Но в таком варианте работает. Спасибо!
Скорее всего. Ни разу эту директиву раньше не встречал, но документация говорит, что она уже устаревшая:
This compiler directive is obsolete starting in Visual Studio 2015 Update 2. We recommend that you use the /execution-charset:utf-8 or /utf-8 compiler options together with using the u8 prefix on narrow character and string literals that contain extended characters.
Это было в самом проекте примера minimal (в версии для Windows):

Code: Select all

#ifdef x64
#include <windows.h>
//#pragma execution_character_set("utf-8")
#endif
Для Linux такой проверки нет, хотя там тоже проект 64-битный.

Post Reply