在较长一段时间里,C/C++开发者所使用的集成开发环境(IDE)要么是比较重量级的VS(Visual Studio)
,要么是Codeblocks·、·Visual C++ 6.0
等轻量级IDE,又或者是诸如notepad++、sublime text
等文本编辑器+GCC编译器
+命令行工具的组合式开发环境。这几种开发方式要么太过庞大比较吃硬件资源,比如VS动辄就要占用几十个G的硬盘空间,要么虽然轻量但是没有友好的代码提示和自动化的编译链接运行过程,开发体验并不是很友好。
近几年来,随着VSCode(Visual Studio Code)
的流行,越来越多的开发者选择以此来作为个人的集成开发环境。使用VSCode开发C/C++程序可以下载安装VSCode官方的C/C++ for Visual Studio Code
插件实现开发过程中的代码提示、调试、运行
等功能,但是需要自行安装C/C++编译器,笔者是用的是GCC编译器MinGW。具体开发环境的搭建过程在此不作讲解,本文关注点在于开发过程中遇到的中文字符相关的乱码问题。
Chinese
中文
#include
#include
#include
int main()
{
char str_es[] = "Chinese";
char str_ch[] = "中文";
char str[30];
// 读英文字符串的文本文件测试
printf("读文件测试:\n");
FILE *fpr_es = fopen("es_src.txt", "r");
while (fgets(str, 30, fpr_es) != NULL)
{
printf("strcmp(%s, %s)=%d\n", str_es, str, strcmp(str_es, str));
}
fclose(fpr_es);
// 直接打印含中文字符串测试
printf("请输入英文字符串“Chinese”:\n");
// 读入英文字符串
scanf("%s", str);
printf("直接打印测试:\n");
// 直接打印英文字符串
printf("str=%s\n", str);
// 与英文字符串常量进行比较
printf("strcmp(%s, %s)=%d\n", str_es, str, strcmp(str_es, str));
// 英文字符串写入文件测试
printf("写文件测试:\n");
FILE *fpw_es = fopen("es_tar.txt", "w");
fprintf(fpw_es, "%s\n%s\n", str_es, str);
fclose(fpw_es);
printf("写入完成!\n");
// 读中文字符串的文本文件测试
printf("读文件测试:\n");
FILE *fpr_ch = fopen("ch_src.txt", "r");
while (fgets(str, 30, fpr_ch) != NULL)
{
printf("strcmp(%s, %s)=%d\n", str_ch, str, strcmp(str_ch, str));
}
fclose(fpr_ch);
// 直接打印中文字符串测试
printf("请输入中文字符串“中文”:\n");
// 读入中文字符串
scanf("%s", str);
printf("直接打印测试:\n");
// 直接打印中文字符串
printf("str=%s\n", str);
// 与中文字符串常量进行比较
printf("strcmp(%s, %s)=%d\n", str_ch, str, strcmp(str_ch, str));
// 中文字符串写入文件测试
printf("写文件测试:\n");
FILE *fpw_ch = fopen("ch_tar.txt", "w");
fprintf(fpw_ch, "%s\n%s\n", str_ch, str);
fclose(fpw_ch);
printf("写入完成!\n");
system("pause");
return 0;
}
读文件测试:
strcmp(Chinese, Chinese)=0
请输入英文字符串“Chinese”:
Chinese
直接打印测试:
str=Chinese
strcmp(Chinese, Chinese)=0
写文件测试:
写入完成!
读文件测试:
strcmp(中文, 中文)=0
请输入中文字符串“中文”:
中文
直接打印测试:
str=
strcmp(中文, )=1
写文件测试:
写入完成!
Press any key to continue . . .
Chinese
Chinese
中文
在使用VSCode + MinGW作为集成开发环境时,在不修改默认设置的情况下执行有中文字符的字符串操作时,通常会遇到以下几个问题:
printf("中文")
或者printf("%s", "中文")
,均可正常显示;但是打印由键盘读入的含中文字符的字符串时,如scanf("%s", str); printf("%s", str);
,含中文字符的字符串str无法正常显示(不显示,或者显示为乱码)。简而言之,从键盘读入的中文字符串无法正常显示和写入文件。
已知信息:
chcp
命令可知此终端使用的字符集编码是65001,即UTF-8编码。既然读入的中文字符是GBK编码无法修改,那就把其他相关的地方全都改成gbk编码即可。
.vscode
目录,如果已存在则跳过此步骤。.vscode
目录中新建settings.json
,launch.json
两个文件,已有则跳过。{
"files.encoding": "gbk"
}
{
"configurations": [
{
...
"externalConsole": true,
...
}
],
"version": "2.0.0"
}
读文件测试:
strcmp(Chinese, Chinese)=0
请输入英文字符串“Chinese”:
Chinese
直接打印测试:
str=Chinese
strcmp(Chinese, Chinese)=0
写文件测试:
写入完成!
读文件测试:
strcmp(中文, 中文)=0
请输入中文字符串“中文”:
中文
直接打印测试:
str=中文
strcmp(中文, 中文)=0
写文件测试:
写入完成!
请按任意键继续. . .
Chinese
Chinese
中文
中文
以上为全部内容,欢迎批评指正。