VS Code集成终端UTF-8输入问题

问题描述 投票:0回答:1

我正在 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的集成终端中无法正常运行

c visual-studio-code visual-c++ utf-8
1个回答
0
投票

使用 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 . . .

© www.soinside.com 2019 - 2024. All rights reserved.