解决 StringCchPrintfW 多字节转宽字符 中文乱码 问题

第一部分

  • 问题代码:
#include <windows.h>
#include<strsafe.h>
#include<locale.h>

int main()
{
    wchar_t sz[200] = L"";

    // 设置 为 当前 操作系统 的 默认 地域设置
    //setlocale(LC_CTYPE, "");

    StringCchPrintfW(sz, _countof(sz), L"ANSI:%S\nUnicode:%s", "I am 中国人 I am very 骄傲", L"我是 Chinese\n");

    MessageBoxW(0, sz, 0, 0);

    return 0;
}
  • 结果如图所示:


    中文乱码

第二部分

  • 解决代码
#include <windows.h>
#include<strsafe.h>
#include<locale.h>

int main()
{
    wchar_t sz[200] = L"";

    // 设置 为 当前 操作系统 的 默认 地域设置
    setlocale(LC_CTYPE, "");

    StringCchPrintfW(sz, _countof(sz), L"ANSI:%S\nUnicode:%s", "I am 中国人 I am very 骄傲", L"我是 Chinese\n");

    MessageBoxW(0, sz, 0, 0);

    return 0;
}
  • 结果如图所示


    中文正常

第三部分

  • 如何解决的?
    添加代码:
    // 设置 为 当前 操作系统 的 默认 地域设置
    setlocale(LC_CTYPE, "");

推荐阅读更多精彩内容