UTF.COM.CN

VC中GBK与UTF8字符串的转换

作者:秋梦无痕 | 来源:网络 | 添加时间:2007-03-14 21:52:44 | 人气:3203

VC中GBK与UTF8字符串的转换

想在VC中把GB2312/GBK字符串转换成UTF8/Unicode字符串,昨天折腾了三个多小时,在google上跑了好几圈,还是没能实现,结果今天早上一过来就搞定了。共享之:

  1. void ConvertGBKToUtf8(CString& strGBK) {
  2. int len=MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK, -1, NULL,0);
  3. unsigned short * wszUtf8 = new unsigned short[len+1];
  4. memset(wszUtf8, 0, len * 2 + 2);
  5. MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK, -1, wszUtf8, len);
  6. len = WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, NULL, 0, NULL, NULL);
  7. char *szUtf8=new char[len + 1];
  8. memset(szUtf8, 0, len + 1);
  9. WideCharToMultiByte (CP_UTF8, 0, wszUtf8, -1, szUtf8, len, NULL,NULL);
  10. strGBK = szUtf8;
  11. delete[] szUtf8;
  12. delete[] wszUtf8;
  13. }
  1. void ConvertUtf8ToGBK(CString& strUtf8) {
  2. int len=MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, NULL,0);
  3. unsigned short * wszGBK = new unsigned short[len+1];
  4. memset(wszGBK, 0, len * 2 + 2);
  5. MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, wszGBK, len);
  6. len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
  7. char *szGBK=new char[len + 1];
  8. memset(szGBK, 0, len + 1);
  9. WideCharToMultiByte (CP_ACP, 0, wszGBK, -1, szGBK, len, NULL,NULL);
  10. strUtf8 = szGBK;
  11. delete[] szGBK;
  12. delete[] wszGBK;
  13. }
责任编辑:冬天来了
【字号: 】【去论坛讨论】【发表评论】【打印本文】【告诉好友】【关闭窗口
网友评论(评论内容只代表网友观点,与本站立场无关!)
  • xiexie 发表于:2008-09-10 10:39:38
    谢谢,测试了 很不错!
  • aaa 发表于:2007-11-20 11:06:11
    这么多Bug,, 兄弟有点责任心哟!!

姓名:

验证码: 点击刷新