我有一个俄语字符串,以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:从char *转换为wchar_t *时的编码失真,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52017716/