cp1251:从char *转换为wchar_t *时的编码失真

时间:2018-08-25 13:18:38

标签: c++ winapi character-encoding char wchar-t

我有一个俄语字符串,以cp1251编码存储在cpp源文件中。

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,但是我应该使用什么?

在WinMain上尝试过std::setlocale(LC_ALL, "ru_RU.cp1251");,但没有帮助。

1 个答案:

答案 0 :(得分:2)

根据Microsoft's documentation,区域设置字符串的格式为react,其中language[_country_region[.code_page]]是不带“ cp”的代码页的编号。 table of supported languages and countries列出了“俄罗斯”和“俄罗斯”,因此code_page的正确字符串是setlocale