CString <------>UTF8? “china中国” 怎么转换成UTF8 编码,再如何转回? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void ConvertANSIToUTF8(CString &strANSI) { int nLen = ::MultiByteToWideChar(CP_ACP,MB_ERR_INVALID_CHARS,(LPCTSTR)strANSI,-1,NULL,0); unsigned short * wszUTF_8 = new unsigned short[nLen+1]; memset(wszUTF_8, 0, nLen * 2 + 2); nLen = MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strANSI, -1, wszUTF_8, nLen); nLen = WideCharToMultiByte(CP_UTF8, 0, wszUTF_8, -1, NULL, 0, NULL, NULL); char *szUTF8=new char[nLen + 1]; memset(szUTF8, 0, nLen + 1); WideCharToMultiByte (CP_UTF8, 0, wszUTF_8, -1, szUTF8, nLen, NULL,NULL); strANSI = szUTF8; delete wszUTF_8; delete szUTF8; } void ConvertUTF8ToANSI(CString &strUTF8) { int nLen = ::MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,(LPCTSTR)strUTF8,-1,NULL,0); unsigned short * wszANSI = new unsigned short[nLen+1]; memset(wszANSI, 0, nLen * 2 + 2); nLen = MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUTF8, -1, wszANSI, nLen); nLen = WideCharToMultiByte(CP_ACP, 0, wszANSI, -1, NULL, 0, NULL, NULL); char *szANSI=new char[nLen + 1]; memset(szANSI, 0, nLen + 1); WideCharToMultiByte (CP_ACP, 0, wszANSI, -1, szANSI, nLen, NULL,NULL); strUTF8 = szANSI; delete wszANSI; delete szANSI; } 调用ConvertANSIToUTF8(CString("abc中国")) 打印转换后的结果 printf("%s", szUTF8) 得到"abc涓 浗"好像不对吧 不是不对,是很对!难道你转了以后还想用这样用printf看到"abc中国"么? UTF-8与GB2312之间的互换http://www.vckbase.com/document/viewdoc/?id=1397http://www.vckbase.com/document/viewdoc/?id=1444 写个文件,然后打开。utf8不能用printf输出http://www.cppblog.com/greatws/archive/2008/08/31/60546.html DC跟窗口句柄相比有什么区别 视频播放程序出错 蓝屏 帮忙来看看 EVC4的dialog的scroll 时间怎么了? 我有段静态html代码,有几个javascript.想嵌套在vc中(不显示出来),然后点运行,就执行那段html??怎么办到? 能不能用CHtmlView显示HTML格式的字符串阿 很奇怪的问T 怎么样才能在NT下彻底隐藏程序? VC中如何判断从SQLSERVER中读取的datetime类型的值为空? QQ2008协议中的密码密钥 如果遇到 一些不常见的外文字符,怎么取到变量中,如何填入数据库呢?Oracle数据库支持吗?
{
int nLen = ::MultiByteToWideChar(CP_ACP,MB_ERR_INVALID_CHARS,(LPCTSTR)strANSI,-1,NULL,0);
unsigned short * wszUTF_8 = new unsigned short[nLen+1];
memset(wszUTF_8, 0, nLen * 2 + 2);
nLen = MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strANSI, -1, wszUTF_8, nLen); nLen = WideCharToMultiByte(CP_UTF8, 0, wszUTF_8, -1, NULL, 0, NULL, NULL);
char *szUTF8=new char[nLen + 1];
memset(szUTF8, 0, nLen + 1);
WideCharToMultiByte (CP_UTF8, 0, wszUTF_8, -1, szUTF8, nLen, NULL,NULL);
strANSI = szUTF8;
delete wszUTF_8;
delete szUTF8;
} void ConvertUTF8ToANSI(CString &strUTF8)
{
int nLen = ::MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,(LPCTSTR)strUTF8,-1,NULL,0);
unsigned short * wszANSI = new unsigned short[nLen+1];
memset(wszANSI, 0, nLen * 2 + 2);
nLen = MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUTF8, -1, wszANSI, nLen); nLen = WideCharToMultiByte(CP_ACP, 0, wszANSI, -1, NULL, 0, NULL, NULL);
char *szANSI=new char[nLen + 1];
memset(szANSI, 0, nLen + 1);
WideCharToMultiByte (CP_ACP, 0, wszANSI, -1, szANSI, nLen, NULL,NULL);
strUTF8 = szANSI;
delete wszANSI;
delete szANSI; }
不是不对,是很对!难道你转了以后还想用这样用printf看到"abc中国"么?
http://www.vckbase.com/document/viewdoc/?id=1444
写个文件,然后打开。utf8不能用printf输出
http://www.cppblog.com/greatws/archive/2008/08/31/60546.html