CP1251:从字符* 转换为 wchar_t* 时的编码失真

cp1251: encoding distortion when converting from char* to wchar_t*

本文关键字:失真 编码 字符 转换 CP1251 wchar      更新时间:2023-10-16

>我有一个俄语字符串,存储在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,但是我应该使用什么?

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

根据Microsoft的文档,语言环境字符串的格式是language[_country_region[.code_page]]其中code_page是不带"cp"的代码页编号。支持的语言和国家/地区表列出了"俄语"和"俄罗斯",因此setlocale的正确字符串是"Russian_Russia.1251"