接收的字符串的中文乱码有关问题原理

接收的字符串的中文乱码问题原理
写了个获取网页内容的小程序。把获取的网页内容放入一个char*的变量中分别打印在控制台上,和写入txt文件里。可是当在控制台打印GB2312编码的网页时没有出现中文乱码,而打印UTF-8时却出现中文乱码。然而,写入到txt文件中,查看却都没有出现乱码。我想知道这是为什么。
一直对编码的问题很模糊,谁能够给我彻底的分析清楚这个问题,有什么可供参考的资料也可以发给我看看。

------解决方案--------------------
直接打印时,系统会使用默认内码输出文本(windows里是gb2312),导致本身编码为utf-8的字符成为乱码。
写入到txt时,以二进制方式保存,那么仍然是utf-8。当使用文本编辑器打开时,文本编辑器会检测文件内容的字符集(检测BOM等),以utf-8显示。
------解决方案--------------------
从网页信息中得来,转成gb就可以打印了。

http://www.vckbase.com/document/viewdoc/?id=1397

------解决方案--------------------
探讨

引用:
直接打印时,系统会使用默认内码输出文本(windows里是gb2312),导致本身编码为utf-8的字符成为乱码。
写入到txt时,以二进制方式保存,那么仍然是utf-8。当使用文本编辑器打开时,文本编辑器会检测文件内容的字符集(检测BOM等),以utf-8显示。

char*类型的变量中有关于字符集的信息吗?字符集信息从哪里得来?

------解决方案--------------------
bom未必是前3个字节,2-4个字节都是正常的,ff fe是utf16 little,fe ff是utf16 big, ef bb bf 是utf8, 而ff fe 00 00 和 00 00 fe ff则对应到了utf32

------解决方案--------------------
这个要读取以网页的charset根据他的编码,做转换成你需要的编码
------解决方案--------------------
windows的记事本即使没有bom它也能靠内容猜出来使用的是什么编码然后正确的显示