mbstowcs和codecvt的怪异处,求高手谁能破解

caowk 2009-01-20 11:25:41

#include <locale>
#include <stdlib.h>
using namespace std;

int main(int argc, char* argv[])
{
char s[] = "abc中国ab"; //"国abc中国ab";
int len = strlen(s) + 1;

wchar_t o[100], x[100];
setlocale(LC_ALL, "");
mbstowcs(o, s, len);

char* from;
wchar_t * to;

mbstate_t cs;
locale loc("");
const codecvt<wchar_t, char, mbstate_t>& oCode = use_facet< codecvt<wchar_t, char, mbstate_t> >(loc, NULL, false);
codecvt<wchar_t, char, mbstate_t>::result nRet = oCode.in(cs, s, s+len, from, x, x+100, to);
return 0;
}
现象1:该程序中得到的0和x的内容居然不一样.
现象2:该程序中,s的内容换成注释中的串后,得到的0和x的内容居然一样了.
怪异的很啊.

...全文
153 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
白云飘飘飘 2010-02-14
  • 打赏
  • 举报
回复
这样改一下就行了:
mbstate_t cs=0;
waizqfor 2009-01-20
  • 打赏
  • 举报
回复
LC_ALL All locale-specific behavior (all categories)
LC_CTYPE Behavior of character-handling functions (except isdigit, isxdigit, mbstowcs, and mbtowc, which are unaffected)

lbh2001 2009-01-20
  • 打赏
  • 举报
回复
setlocale(LC_CTYPE, "chs");
xiaoyisnail 2009-01-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 caowk 的回复:]
我在BCB上测试,发现是正常的.在VC6/VC2005上测试都是有问题的.
看来是VC的bug;不明白这么多年了,没有人用VC做本地化程序?还是别人也发现了,没有给微软提MR.

[/Quote]

一般用locale和codecvt做本地化,都是自己继承codecvt并实现自己的转换facet,网上有很多资料,楼主可以参考
caowk 2009-01-20
  • 打赏
  • 举报
回复
我在BCB上测试,发现是正常的.在VC6/VC2005上测试都是有问题的.
看来是VC的bug;不明白这么多年了,没有人用VC做本地化程序?还是别人也发现了,没有给微软提MR.
xiaoyisnail 2009-01-20
  • 打赏
  • 举报
回复
楼上两位都没回答到点子上啊,楼主已经setlocale(LC_ALL, ""); 如果是中文windows的话locale应该就是.936
楼主的问题是codecvt本身实现的问题,用codecvt结合locale并不一定能成功转换的
内容概要:本文针对考虑算力负荷时空迁移特性的多微电网与共享储能系统的协同优化调度问题展开研究,并提供了完整的Matlab代码实现。研究构建了融合算力负荷动态迁移特征的数学优化模型,通过引入共享储能机制,实现多微电网间的能量互济与资源协同,有效提升系统对分布式能源波动性和负荷不确定性的适应能力。文中采用先进的优化算法解该调度模型,重点解决了算力任务在时空维度上的灵活调配与电力供需平衡之间的耦合关系,旨在提高综合能源系统的运行经济性、可靠性与灵活性。所提出的方法为未来能源互联网背景下电-算协同管理提供了理论支持与技术路径。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的科研人员、高校研究生,尤其适用于从事微电网运行、共享储能配置、综合能源系统优化以及电-算融合等领域研究的专业技术人员。; 使用场景及目标:①开展多微电网与共享储能系统的协同调度策略设计与仿真验证;②支撑高比例可再生能源接入下的新型电力系统优化运行研究;③为考虑算力迁移的数据中心与电网协同调度提供建模与算法参考;④作为高水平学术论文撰写或学位课题研究的技术支撑与代码复现平台。; 阅读建议:建议读者结合Matlab代码与相关学术文献深入研读,重点关注目标函数构建、约束条件设定及解器调用逻辑,可在现有模型基础上拓展多时间尺度优化、不确定性建模(如鲁棒优化、随机规划)或加入实际工程约束进行二次开发与深化研究。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧