1.问题
最近发现我在vscode中使用MinGW-w64 编译器执行c文件时,输入char型(%s)的中文无法被正常打印。但是在Visual Studio 2022的终端使用命令行去执行同个文件,却可以正常输出。目前可以确定的是并不是由于c文件和终端的编码不同。我都统一了用UTF-8,其他的中文如果直接打印也都没有问题。所以我初步怀疑是不是MinGW-w64 编译器有问题,同样的代码在Visual Studio 2022自带的编译器里就没有问题。不知道大家有没有遇到一样的情况。
于是我用以下的代码去试了几种情况。1是通过输入%s,后打印,2是直接打印中文汉字。剩下的几种就是英文日文这些。
2.环境
vscode:版本: 1.85.1 (user setup)
Visual Studio 2022:Visual Studio 2022 Developer Command Prompt v17.4.2
MinGW-w64 :gcc.exe (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 8.1.0
3.代码
#include <stdio.h>
#include <string.h>
int main(void) {
char name[32];
printf("请输入您的名字:\n");
scanf("%s", name);
printf("%s\n", name);
//获取name的ascii码
int i;
for (i = 0; i < strlen(name); i++) {
printf("%d ", name[i]);
}
printf("\n");
printf("Hello World!\n");
printf("林\n");
//获取林的ascii码
char str[] = "林";
for (i = 0; i < strlen(str); i++) {
printf("%d ", str[i]);
}
printf("\n");
printf("Hello World!\n");
printf("为什么会这样呢?\n");
printf("こんにちは\n");
return 0;
}
4.结果
【在vscode中】
通过char型输入的汉字【林】,直接空白打印出来了?而且as码也是不正常的,貌似没有被正常获取。ps:每次重新执行获取的as码都是不一样!就很离谱
如果输入英文的话,是正常的。
【在Visual Studio 2022终端中】
这是正常的,汉字也被正确打印出来了。ASCII码也对上了。
想了许久也没想出来是哪里的问题,倒是在MinGW-w64的论坛上看见有日语提问者也遇到类似的问题。
链接:https://sourceforge.net/p/mingw-w64/bugs/943/
首先代码本身应该是没问题的,在在Visual Studio 2022中用自带的编译器是可以正常输出的,其次也可以排除编码不同的问题,在vscode中的输出 printf("为什么会这样呢?\n");都是正常的,如果出现常见的乱码问题,那将除了英文都会乱码的。还请各位帮忙接解疑!多谢了