利用Windows API如何获得友好的本地字符编码名称

我在写一个工具软件,需要以本地ANSI字符集输出一个xml文件,并用msxml解析。Unicode的版本已经解决了,就剩ANSI字符编码的版本了。我用以下方法在szCod... 我在写一个工具软件,需要以本地ANSI字符集输出一个xml文件,并用msxml解析。
Unicode的版本已经解决了,就剩ANSI字符编码的版本了。

我用以下方法在szCodePage得到类似936这样的字符串。
TCHAR szCodePage[10];
GetLocaleInfo(GetSystemDefaultLCID(),
LOCALE_IDEFAULTANSICODEPAGE,
szCodePage,sizeof(szCodePage)/sizeof(szCodePage[0]);

可惜msxml无法解析类似
<?xml version="1.0" encoding="windows-936" ?>
<?xml version="1.0" encoding="cp936" ?>
<?xml version="1.0" encoding=".936" ?>

这样的编码信息。

请教各位达人,如何从CP_ACP获得类似gb2312,gbk这样的字符串?

或者这个问题是否还有其他解法,例如以HTTP稳定的提供查询功能的网站,或其他可以利用的ActiveX\COM组件?
补充一下,输出文件必须是多字节编码的,我再强调一遍,输出Unicode字符的xml文件是一个,另外还需要一个多字节编码的输出文件。这2个都是需要的。

整个问题跟字符编码转换无关,所有不同字符编码之间的转换问题都已经被解决,唯一要解决的是提供一个msxml可以接受的字符编码名。

_______________
extern UINT cp; //想要获得友好名称的代码页,在别处获得,例如GetACP()
TCHAR charsetString[MAX_PATH] = _T(""); //友好名称被ssanf获取到这里
CPINFOEX info;
GetCPInfoEx(cp,0,&info);
assert(1 == _stscanf(info.CodePageName,
_T("%*d (ANSI/OEM - %*s %[a-zA-Z-]"),charsetString));
______________
以上这个方法是我能找到的唯一方法,对于常见的936,950,932都是有效的,但是对类似875,949是得不到正确的结果的。。

如果问题到了下个星期还没有人回答就直接完结吧。。
展开
 我来答
jdq_37
2011-12-08 · TA获得超过996个赞
知道小有建树答主
回答量:658
采纳率:0%
帮助的人:953万
展开全部
既然Unicode版本可以解决,把ANSI字符转换成Unicode码再用解决Unicode版本的方法解决不就可以了么。
可以考虑用MultiByteToWideChar和WideCharToMultiByte函数进行两者的转换,详细用法可参考MSDN或http://blog.csdn.net/norains/article/details/1461174
更多追问追答
追问
Unicode的版本已经解决了,就剩ANSI字符编码的版本了。意思是必须产生一个ANSI编码的文件。
追答
不知道你的具体应用环境,不过WinAPI函数MultiByteToWideChar是可以把ANSI字符转换成Unicode码字符的,仔细查阅MSDN,或我回答中提到的参考链接,研究研究就知道了,我明天上班,不能详谈了,抱歉。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
危献e3
2011-12-09 · TA获得超过2053个赞
知道大有可为答主
回答量:2738
采纳率:0%
帮助的人:1960万
展开全部
自己转

参考资料: http://msdn.microsoft.com/en-us/library/dd317756%28v=VS.85%29.aspx

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式