@[toc]
问题背景在较长一段时间里,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。具体开发环境的搭建过程在此不作解说,本文关注点在于开发过程中遇到的中文字符相干的乱码问题。
问题形容测试代码英文字符串文本文件 es_src.txt
Chinese中文字符串文本文件 ch_src.txt
中文main.c
#include <stdio.h>#include <stdlib.h>#include <string.h>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;}测试后果控制台输入后果能够看到(a) 从文件中读取英文字符串并打印能够失常显示;间接打印英文字符串常量和间接打印从键盘读入的英文字符串均失常显示,应用strcmp进行比拟后果为0。(b) 从文件中读取中文字符串并打印能够失常显示;间接打印中文字符串常量能够失常显示,然而没有显示出从键盘读入的中文字符串,应用strcmp进行比拟后果也不为0。读文件测试:strcmp(Chinese, Chinese)=0 请输出英文字符串“Chinese”:Chinese间接打印测试:str=Chinesestrcmp(Chinese, Chinese)=0写文件测试:写入实现!读文件测试:strcmp(中文, 中文)=0 请输出中文字符串“中文”: 中文间接打印测试:str=strcmp(中文, )=1写文件测试:写入实现!Press any key to continue . . .英文字符串文本文件 es_tar.txt英文字符串常量和从键盘读入的英文字符串均失常写入到文件中。
...