acmilan作者
10年4个月前修改于 10年4个月前IP:四川
824423
1楼

从上面的分析来看,CP_THREAD_ACP是罪魁祸首——它跟随ThreadLocale变化,而ThreadLocale跟随系统用户界面语言变化,导致了不匹配。

微软也给开发者留了一个解决办法,只要在stdafx.h最前面加上这样一句就行了:

#define _CONVERSION_DONT_USE_THREAD_LOCALE 1

也可以将程序编译为使用Unicode字符集的程序,遇到需要多字节字符串的地方再手工转换,这样也可以避免这个问题。

至于微软为什么要挖这个坑,就不得而知了。就本人分析而言,这可能属于对Windows操作系统的复杂性考虑不足导致的误用现象。VC++2002最早出现这种现象。

评论
文号 / 824423

千古风流
名片发私信
学术分 4
总主题 466 帖总回复 2942 楼拥有证书:进士 学者 笔友
注册于 2009/05/30 21:22:42最后登录 2019/01/31 17:16:38
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:0

个人简介

暂未填写
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的