cp1251: искажение кодирования при преобразовании из char * в wchar_t * - PullRequest
0 голосов
/ 25 августа 2018

У меня есть русская строка, хранящаяся в исходном файле cpp с кодировкой cp1251.

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    const char *src = "Мой текст";
    wchar_t dst[30];

    switch (message)
    {
    case WM_CREATE:
        mbstowcs(dst, src, 29);
        //outputs "Ìîé òåêñò" instead of "Мой текст"
        MessageBox(hWnd, dst, L"Header", MB_OK);    
    ...

К сожалению, "Мой текст" искажен.Кажется, что mbstowcs не следует использовать в этом случае, но что я должен использовать?

Пробовал std::setlocale(LC_ALL, "ru_RU.cp1251"); в WinMain, но это не помогло.

1 Ответ

0 голосов
/ 25 августа 2018

Согласно документации Microsoft формат строки языкового стандарта: language[_country_region[.code_page]], где code_page - это номер кодовой страницы без "cp".В таблице поддерживаемых языков и стран перечислены "русский" и "русский", поэтому правильная строка для setlocale: "Russian_Russia.1251".

...