MFC字符编码

本文详细介绍了在使用MFC程序时遇到字符编码问题的解决过程,包括设置工作默认编码、理解unicode编码为utf_16,以及如何在内部使用MBCS并最终转换为utf8编码。通过提供具体的代码示例,本文旨在帮助开发者避免常见的编码错误,提高编程效率。

刚开始开始MFC程序的时候就遇到字符编码的问题,不知道可以设置工作默认编码,搜了下又发现默认的unicode编码又是什么utf_16,我勒个去,索性还是用的MBCS,向外面发送的时候再改用utf8编码,所用的方法如下:

char * CharConvert::zhToUtf8(CString str){
int len;
len = MultiByteToWideChar(CP_ACP,0,str,-1,NULL,0);
wflag = TRUE;
wbuf = new WCHAR[len+1];//(WCHAR *)malloc(sizeof(WCHAR)*(len+1));
MultiByteToWideChar(CP_ACP,0,str,-1,wbuf,len);
str.Format("len is : %d",len);
len = WideCharToMultiByte(CP_UTF8,0,wbuf,-1,NULL,0,0,0);
flag = TRUE;
buf = new char[len+1];
WideCharToMultiByte(CP_UTF8,0,wbuf,-1,(LPSTR)buf,len,0,0);
return buf;
};
char * CharConvert::utf8ToZh(const char * p){
int len;
len = MultiByteToWideChar(CP_UTF8, 0, p, -1, NULL, 0);
wflag = TRUE;
wbuf = new WCHAR[len+1];
MultiByteToWideChar(CP_UTF8, 0, p, -1, wbuf, len);
len = WideCharToMultiByte(CP_UTF8, 0, wbuf, -1, NULL, 0, 0, 0);
flag = TRUE;
buf = new char[len+1];
WideCharToMultiByte(CP_ACP, 0, wbuf, -1, (LPSTR)buf, len, 0, 0);
return buf;
}
void CharConvert::destruct(){
if(wflag){
delete [] wbuf;//free(wbuf);
wflag = FALSE;
}
if(flag){
delete [] buf;
flag = FALSE;
}
};

而且在将转换后的字符串指针赋值的时候 ,一定要用String接收,再destruct,若用指针接收,则destruct之后原来的指针便指向无效内容了。

总之,一切都需要细心,否则会浪费很多时间。

转载于:https://www.cnblogs.com/jefffyang/archive/2013/01/09/2853068.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值