c++ - cp1251 : encoding distortion when converting from char* to wchar_t*

标签 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");,但没有帮助。

最佳答案

根据 Microsoft's documentation , 语言环境字符串的格式为 language[_country_region[.code_page]] 其中 code_page 是不带“cp”的代码页编号。 table of supported languages and countries列出“Russian”和“Russia”,因此 setlocale 的正确字符串是 "Russian_Russia.1251"

关于c++ - cp1251 : encoding distortion when converting from char* to wchar_t*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52017716/

相关文章:

c++ - 为什么 C++ 中 "this"的地址会改变?

C++从流中提取 double

winapi GetSystemTimes函数不填lpIdleTime/lpKernelTime/lpUserTime

c++如何初始化打开文件对话框(GetOpenFileName)

c - 来自 GetRawInputDeviceList() 的原始输入设备太多

c++ - chrono_literals 不是命名空间名称

c++ - 我是 C++ 的新手。所以请帮我看下面的片段

c# - 是否可以检测两种可能的文本文件编码?

character-encoding - 使用 Rebol 3 执行文件编码转换

java - 如何防止写入特殊字符