我正在 VS Code 中使用 MSVC 编译器。我将集成终端设置为powershell 7。代码页是UTF-8,即65001。使用printf和puts等函数没有问题,可以将UTF-8字符打印到屏幕上,但是当我尝试读取utf时-8 使用 fgets 到缓冲区并将缓冲区打印到屏幕上,我无法获得所需的结果。这是代码:
#include <locale.h>
#include <stdio.h>
int main(){
char *charset = setlocale(LC_ALL, ".UTF-8");
char buffer[64]; puts("Enter something...");
fgets(buffer, sizeof buffer, stdin);
printf("charset: %s\ninput: %s\n", charset, buffer); }
这是输出:
Enter something...
ĞÜŞİÖÇ
charset: Turkish_Turkey.utf8
input:
当我使用 Powershell 7 运行相同的程序时,它运行良好。但在vs code的集成终端中无法正常运行
使用 Visual Studio——我无法让你的代码工作,直到添加了
SetConsoleOutputCP
,我在一些网络搜索后发现了它,它使一切变得不同。有用的文章这里和微软信息这里。
另外,我不知道如何输入您的字符串
ĞÜŞİÖÇ
,所以我即兴复制了 StackOverflow 上您的问题中的字符串,然后粘贴并保存到文件中ip.txt
。
最后一步是我在运行时将输入从文件重定向到程序,如下所示:
FILENAME.EXE < ip.txt
...您可以在下面的
Console window scrape
中看到此语法。
但我想澄清的是,您不必执行该重定向,因为显然您可以键入该字符串。我只是本着透明的精神分享这个细节。
这段代码是我刚刚编译和测试的:
#include <stdio.h>
#include <windows.h> /* SetConsoleOutputCP() */
#include <locale.h>
int main()
{
char buffer[64];
char *res;
SetConsoleOutputCP(65001); /* 65001 = codepage I needed, might be different for you*/
puts("Enter something...");
res = fgets(buffer, sizeof buffer, stdin);
printf("input: %s \nfgets() returned %s\n", buffer, res);
system("pause");
return 0;
}
Console window scrape:
F:\PROJECTS\32bit\_HELP\C\H165>code < ip.txt
Enter something...
input: ĞÜŞİÖÇ
fgets() returned ĞÜŞİÖÇ
Press any key to continue . . .