2012年(158)
分类: C/C++
2012-11-20 11:18:07
网友评论2012-11-20 11:20:17
Bennie
觉得这算不上Bug,而是因为我们平常的一些假设不正确。
对于multibyte来说,C库相当于程序开始时有如下设定
setlocale ( LC_ALL, "C" );
可参见《C99》的7.11.1.4和MSDN的相关说明。
所以,当你使用其他代码页的multibtye时,必须设定到对应的代码页以保证可以正确转换。
VC6可以是因为fstream直接调用了fopen,fopen可能直接调用了CreateFile,而CreateFile是依赖系统设定的代码页来转换字符的。所以只能算是凑巧。而VC8则使用mbstowcs函数。
这正如你没有设定locale而使用了mbstowcs来转换中文一样不能得到正确的结果,但是你不能说这是MS的BUG。
网友评论2012-11-20 11:20:09
天爬爬
我的blog上前两天刚刚讲了这个问题的解决方法,也是才发现
http://www.cppblog.com/danoyang/archive/2006/05/23/7523.html