我需要编写一个读写希腊字母的程序。由于希腊语不是ASCII,所以我将控制台语言环境设置为UTF-8。我设法使一些字符串在这种多字节混乱中起作用,直到到达需要用户输入的部分为止

因此,只张贴有问题的部分

while(1) {
    char inputc[50];
    memset(inputc,'\0',50);
    scanf("%s",inputc)
    printf("%s",inputc);
}


对于任何希腊字符,这将打印出与输入内容不同的内容。另外,如果我对每个元素执行printf("%d",inputc[i]);以获得int值(希腊字母为负),则与从文字中读取相同字符相比,我得到的值将有所不同。

最佳答案

使用的命令是SetConsoleOutputCP(CP_UTF8);


那只会影响stdout(printf)。要同时设置标准输入(scanf),您还需要SetConsoleCP(CP_UTF8)。如果设置一个而不设置另一个,则输入和输出字符自然会有所不同。

但是,请注意,将Windows控制台设置为代码页65001 / CP_UTF8(或通常不具有特殊支持的任何多字节代码页,即不是传统区域设置默认代码的多字节代码页)时,会出现严重错误。页)。 Windows在这种状态下报告的字节数错误,导致打印调用混乱并重复输出,并扫描挂起的调用。通常,这不是让Windows程序使用Unicode的可行方法。

08-07 03:55