写了一个读网页的程序,保存到txt中
后来用fstream读到string
结果程序老是出不了结果,断点调试发现string中全是乱码
没弄明白什么原因
因为文件流读写是常有的事,这次尽然乱码
本来以为是因为vs 2008 建mfc工程 UNICODE 字符集的问题
准备把工程字符集属性改到ANSI,
想想想用UNICODE才是王道就继续找原因(不过后来发现即使我换了字符集错误还是排除不了)
我把文本文件a另存为UNICONDE的,还是乱码
又把a中内容复制到另外一个txt b中,读取这个b结果竟然是正确的。
本来还很疑惑,可手不自觉的将a再次另存为却发现 “编码”下拉框选中的竟然是UTF-8
看到UTF-8我的脑子中首先闪出来的是在国内占据份额做多的两大搜索引擎--- Baidu和Google
有人知道为什么吗,知道的可以留言,奖品是本人现在正在开发的小软件一份,(*^__^*) 嘻嘻……
知道是UTF-8和ANSI的问题后就好办了,转换啊
不过我以为是ANSI的所以有ANSI转换为UNICODE的步骤,不如直接找UTF-8到UNICODE的办法,更直接
搜索了一下,没什么好的结果
自己看了函数看函数 MultiByteToWideChar 发现参数 CodePage 竟然有 CP_UTF8
因为之前虽然也用过很多次,不过都是取CP_ACP,发现meaning中有……
Value | Meaning |
---|---|
CP_ACP | The current system Windows ANSI code page. This value can be different on different computers, even on the same network. It can be changed on the same computer, leading to stored data becoming irrecoverably corrupted. This value is only intended for temporary use and permanent storage should be done using UTF-16 or UTF-8 if possible. |
又研究了一下这个函数
呵呵,发现喽
inFile >> szRead;
memset(pszBuffer, '/0', 1024);
MultiByteToWideChar(CP_UTF8, 0, szRead.c_str(), -1, pszBuffer, 1023);
搞定