从上面的分析来看,CP_THREAD_ACP是罪魁祸首——它跟随ThreadLocale变化,而ThreadLocale跟随系统用户界面语言变化,导致了不匹配。
微软也给开发者留了一个解决办法,只要在stdafx.h最前面加上这样一句就行了:
<code class="language-cpp">#define _CONVERSION_DONT_USE_THREAD_LOCALE 1 </code>
也可以将程序编译为使用Unicode字符集的程序,遇到需要多字节字符串的地方再手工转换,这样也可以避免这个问题。
至于微软为什么要挖这个坑,就不得而知了。就本人分析而言,这可能属于对Windows操作系统的复杂性考虑不足导致的误用现象。VC++2002最早出现这种现象。
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |