漫谈windows下c++中文输入
对于初学者来说,中文乱码一直是一个非常头痛的问题,很多人把大量的时间用于解决乱码问题,究其原因就是还没意识到中文字符的不同编码方式。
最近做一个c++的实验,我发现从控制台输入中文,程序能够读取并正确显示该中文。然而在读取文件中的中文字时,控制台输出的却是乱码。
下面看一段代码
#include <iostream>#include <fstream>using namespace std;int main(){ ofstream out("d:\\test.txt"); char c[3]; c[0]=0xE5; c[1]=0x95; c[2]=0x8A; out<<c[0]<<c[1]<<c[2]<<endl; out.close(); return 0;}打开test.txt,显示正常。此时大家应该明白,其实并不是你写的c++程序翻译中文字符,负责翻译的是输出的对象。比如你将字符串输出到windows的控制台,那么就由控制台负责翻译,而且控制台只能识别ANSI。现在回到我刚才提到的实验,从控制台输入到控制台输出底层用的都是ASNI码,所以输出没问题。但当由文件输入时,一定要保证文件的编码格式为ANSI,那么控制台才能正常输出。
看到这大家应该明白了,中文乱码一般都是由编码不一致的造成的。遇到相关问题时,要从底层编码的出发解决。