2025年1月31日 星期五 甲辰(龙)年 冬月廿九 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > VC/VC++

字符集转换(UTF-8、ANSI)

时间:09-15来源:作者:点击数:30
CDSY,CDSY.XYZ

字符集转换(UTF-8、ANSI)

我是因为数据库使用时,有中文所以导致需要转字符集

UTF-8字符集转ANSI字符集

  • CString MachinePara::Utf82Ansi(CString& srcCode)
  • {
  • int srcCodeLen=0;
  • //计算接收到待转换字符串的缓冲区所需宽字符数
  • srcCodeLen=MultiByteToWideChar(CP_UTF8,NULL,srcCode,srcCode.GetLength(),NULL,0);
  • wchar_t* result_t=new wchar_t[srcCodeLen+1];
  • //向result_t缓冲区写入宽字符
  • MultiByteToWideChar(CP_UTF8,NULL,srcCode,srcCode.GetLength(),result_t,srcCodeLen);
  • result_t[srcCodeLen]='\0';
  • //计算接收到待转换字符串的缓冲区所需字节数
  • srcCodeLen=WideCharToMultiByte(CP_ACP,NULL,result_t,wcslen(result_t),NULL,0,NULL,NULL);
  • char* result=new char[srcCodeLen+1];
  • //向result缓冲区写入字符
  • WideCharToMultiByte(CP_ACP,NULL,result_t,wcslen(result_t),result,srcCodeLen,NULL,NULL);
  • result[srcCodeLen]='\0';
  • CString srcAnsiCode;
  • srcAnsiCode=result;
  • delete []result_t;
  • delete []result;
  • return srcAnsiCode;
  • }

ANSI字符集转UTF-8字符集

  • CString MachinePara::ANSItoUTF8(CString& strAnsi)
  • {
  • //获取转换为宽字节后需要的缓存区大小,创建宽字节缓存区,936为简体中文GB2312代码页
  • UINT nLen = MultiByteToWideChar(936, NULL, strAnsi, -1, NULL, NULL);
  • WCHAR* wszBuffer = new WCHAR[nLen + 1];
  • nLen = MultiByteToWideChar(936, NULL, strAnsi, -1, wszBuffer, nLen);
  • wszBuffer[nLen] = 0;
  • //获取转为UTF8多字节后需要的缓存区大小 创建多字节缓存区
  • nLen = WideCharToMultiByte(CP_UTF8, NULL, wszBuffer, -1, NULL, NULL, NULL, NULL);
  • CHAR* szBuffer = new CHAR[nLen + 1];
  • nLen = WideCharToMultiByte(CP_UTF8, NULL, wszBuffer, -1, szBuffer, nLen, NULL, NULL);
  • szBuffer[nLen] = 0;
  • strAnsi = szBuffer;
  • //内存清理
  • delete[]wszBuffer;
  • delete[]szBuffer;
  • return strAnsi;
  • }
CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐