解决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
}
}