此为VS的一个BUG,原因是本地化的问题,如下处理即可。
locale loc = locale::global(locale(""));
ifstream ifs(filename.c_str());
locale::global(loc);
在 用ifstream和ofstream打开文件前设置全局locale为本地环境,打开文件后再设置回去。用locale对象的name方法可以看到,通 过locale("")构造出的locale对象的name为"Chinese_People's Republic of China.936",而原始的locale对象的name为"C",也就是缺省的ANSI_C公约。
locale loc = locale::global(locale(""));
ifstream ifs(filename.c_str());
locale::global(loc);
在 用ifstream和ofstream打开文件前设置全局locale为本地环境,打开文件后再设置回去。用locale对象的name方法可以看到,通 过locale("")构造出的locale对象的name为"Chinese_People's Republic of China.936",而原始的locale对象的name为"C",也就是缺省的ANSI_C公约。
本文介绍了一个Visual Studio中的BUG,该问题源于本地化处理不当。解决方案是在使用ifstream和ofstream打开文件前后调整全局locale设置,确保正确读写文件。
421





