解决scanf和gets在代码页65001下的乱码问题

1.字符集 使用 Unicode 字符集 必须

2.不要使用system("chrp 65001") 用 ::SetConsoleOutputCP(65001); 代替

3.gets_s(SC_Input, MEM_PAGE); 系统默认编码GBK

4.scanf_s("%[^\n]", SC_Input, MEM_PAGE); 同上

5.PS : --IDE vs2019

int main(int,char*) {
    int i = 0;
    char SC_Input[0x1000];
    wchar_t SC_InputW[0x1000];
    while (true) {
        gets_s(SC_Input, 0x1000); // scanf_s("%[^\n]", SC_Input, MEM_PAGE);
        i = ::MultiByteToWideChar(936, NULL, SC_Input, ~0,0,0);
        ::MultiByteToWideChar(936, NULL, SC_Input, ~NULL, (PWSTR)SC_InputW, i);
        i = ::WideCharToMultiByte(CP_UTF8, NULL, (PWSTR)SC_InputW, ~NULL,0,0,0,0);
        ::WideCharToMultiByte(CP_UTF8, NULL, (PWSTR)SC_InputW, ~NULL, SC_Input, i, 0,0);
        printf("%s\n", SC_Input); // 自行添加 /execution-charset:utf-8
    }
}
 
posted on 2022-06-03 21:38  Ksa-NL  阅读(184)  评论(0)    收藏  举报