CP1251:从字符* 转换为 wchar_t* 时的编码失真
cp1251: encoding distortion when converting from char* to wchar_t*
>我有一个俄语字符串,存储在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"
。
相关文章:
- 如何确定我已使用非编码文件到达 EOF?
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 旋转模型矩阵时的形状失真
- 在卡萨布兰卡形成编码参数的列表
- 使用C++进行游程编码
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 使用已使用 java 编码的 openssl 解码数据
- boost 是否有按特殊类型值编码状态"compact optional"?
- 如何在CPP的给定目录中列出UTF编码的文件名?
- 如何使用 C++将 ISO-2022-KR 编码转换为 UTF-8 编码?
- 绝对编码器十六进制输入
- 防止C++中的硬编码数字
- 将C++ std::string 转换为 UTF-16-LE 编码的字符串
- 使用文件内容作为硬编码字符串
- 运行长度编码程序 c++ 的问题
- 以C++为单位进行运行长度编码
- *新的编码器*格式和运算符
- 在CRC-16 CCITT中将数据从二进制解码为文本,我应该输入一个码字,使用CRC生成器进行编码
- 使用 IMFSinkWriter 编码的视频的播放速度会根据宽度而变化
- CP1251:从字符* 转换为 wchar_t* 时的编码失真