字符编码转换,在MFC下使用没问题

XzmBaseFuncLib.h

#pragma onceclass CXzmBaseFuncLib
{
public:CXzmBaseFuncLib(){}~CXzmBaseFuncLib(){}/*** @brief 将给定的GBK字符串转换为UTF-8编码*** @param pSrc * @param pDst */static int CharToUtf8(const char* pSrc, char** pDst) throw();/*** @brief 将给定的Utf8字符串转换为Char编码*** @param pSrc * @param pDst */static int Utf8ToChar(LPCSTR pSrc, char** pDst);/*** @brief 将给定的UNICODE字符串转换为Char编码*** @param strSrc * @param pDst */static int Us2ToChar(const CString& strSrc, char** pDst,int nCodePage = CP_ACP);/*** @brief 将给定的GBK字符串转换为UNICODE编码*** @param szSrc * @param pDst */static int CharToUS2(const char* szSrc, WCHAR** pDst,int nCodePage = CP_ACP);/*** @brief 将给定的UNICODE字符串转换为UTF-8编码*** @param strSrc * @param pDst */static int US2ToUtf8(const CString& strSrc,char** pDst) throw();/*** @brief 将给定的Utf8字符串转换为UNICODE编码*** @param pSrc * @param pDst */static int Utf8ToUS2(LPCSTR pSrc, WCHAR** pDst) throw();/*** @brief GBK编码转换为简体中文*** @param strSrc * @return */static CString GBKToGB2312(const CString &strSrc);/*** @brief 简体中文转换为GBK编码*** @param strSrc * @return */static CString GB2312ToGBK(const CString &strSrc);/*** @brief 转换文字*** @param strSrc * @return */static CString PercentStringDecode(const CString& strSrc,BOOL bUtf8 = FALSE);/*** @brief *** @param &x * @return */static BYTE toHex(const BYTE &x);/*** @brief 将数字转换为字符串*** @param i * @return */static CString NumToStr(LONGLONG i);/*** @brief 字符串转换到数字*** @param strTemp * @return */static DWORD StrToNum(const CString& strTemp);/*** @brief 字符串转换到数字,支持超大数字*** @param strTemp * @return */static void StrToNum2(const CString& strTemp,DWORD &dwNum1,DWORD &dwNum2);/*** @brief 字节流转换到字符串*** @param szSrc 字节流源* @param nLen 字节流长度* @param szDest 目标字符串* @return */static void ChangeToChar(byte *szSrc,int nLen,char *szDest);/*** @brief 判断路径释放存在*** @param strPath * @return */static BOOL IsPathExist(const CString& strPath) throw();
};

XzmBaseFuncLib.cpp

#include "stdafx.h"
#include "BaseFuncLib.h"int CXzmBaseFuncLib::CharToUtf8(const char* pSrc, char** pDst) throw()
{char* cUTF8=NULL;WCHAR* wchar=NULL;int iLength=0;iLength=MultiByteToWideChar(CP_ACP,0,pSrc,-1,NULL,0);if(!iLength)return iLength;iLength++;wchar=new WCHAR[iLength];if(wchar==NULL)return 0;::memset(wchar,0,iLength*sizeof(WCHAR));::MultiByteToWideChar(CP_ACP,0,pSrc,-1,wchar,iLength-1);iLength=::WideCharToMultiByte(CP_UTF8,0,wchar,-1,NULL,0,NULL,NULL);if(!iLength){delete []wchar;wchar=NULL;return iLength;}iLength++;cUTF8=new char[iLength];if(cUTF8!=NULL){::memset(cUTF8,0,iLength*sizeof(char));iLength=::WideCharToMultiByte(CP_UTF8,0,wchar,-1,cUTF8,iLength-1,NULL,NULL);*pDst = cUTF8;}elseiLength = 0;delete []wchar;wchar=NULL;return iLength;
}int CXzmBaseFuncLib::Utf8ToChar(LPCSTR pSrc, char** pDst)
{WCHAR*  strW=NULL;int iLength=0;iLength=::MultiByteToWideChar(CP_UTF8,0,pSrc,-1,NULL,0);if(!iLength)return iLength;iLength++;strW = new WCHAR[iLength];if(strW==NULL)return 0;::memset(strW,0,iLength*sizeof(WCHAR));::MultiByteToWideChar(CP_UTF8,0,pSrc,-1,strW,iLength-1);iLength=::WideCharToMultiByte(CP_ACP,0,strW,-1,NULL,0,NULL,NULL);if(!iLength){delete []strW;strW=NULL;return 0;}iLength++;char *strA=NULL;strA=new char[iLength];if(strA!=NULL){::memset(strA,0,iLength*sizeof(char));iLength = ::WideCharToMultiByte(CP_ACP,0,strW,-1,strA,iLength-1,NULL,NULL);*pDst=strA;}elseiLength = 0;delete []strW;strW=NULL;return iLength;
}int CXzmBaseFuncLib::Us2ToChar(const CString& strSrc, char** pDst,int nCodePage /*= CP_ACP*/)
{int iLength=::WideCharToMultiByte(nCodePage,0,strSrc,-1,NULL,0,NULL,NULL);if(!iLength)return iLength;iLength++;char *strA=NULL;strA= new char[iLength];if(strA==NULL)return 0;::memset(strA,0,iLength*sizeof(char));int iLength1 = 0;if(nCodePage)iLength1 = ::WideCharToMultiByte(nCodePage,WC_COMPOSITECHECK,strSrc,-1,strA,iLength-1,NULL,NULL);elseiLength1 = ::WideCharToMultiByte(nCodePage,0,strSrc,-1,strA,iLength-1,NULL,NULL);*pDst=strA;return iLength1;
}int CXzmBaseFuncLib::CharToUS2(const char* szSrc, WCHAR** pDst,int nCodePage /*= CP_ACP*/)
{WCHAR* strW=NULL;int iLength=0;iLength=MultiByteToWideChar(nCodePage,0,szSrc,-1,NULL,0);if(!iLength)return iLength;iLength++;strW=new WCHAR[iLength];if(strW==NULL)return 0;::memset(strW,0,iLength*sizeof(WCHAR));int iLength1 = 0;if(nCodePage)iLength1 = ::MultiByteToWideChar(nCodePage,MB_COMPOSITE,szSrc,-1,strW,iLength-1);elseiLength1 = ::MultiByteToWideChar(nCodePage,0,szSrc,-1,strW,iLength-1);*pDst=strW;return iLength1;
}int CXzmBaseFuncLib::US2ToUtf8(const CString& strSrc,char** pDst) throw()
{char* cUTF8=NULL;int iLength=0;iLength=::WideCharToMultiByte(CP_UTF8,0,strSrc,-1,NULL,0,NULL,NULL);if(!iLength)return iLength;iLength++;ATLTRY(cUTF8=new char[iLength]);if(cUTF8!=NULL){::memset(cUTF8,0,iLength*sizeof(char));iLength=::WideCharToMultiByte(CP_UTF8,0,strSrc,-1,cUTF8,iLength-1,NULL,NULL);*pDst = cUTF8;}elseiLength = 0;return iLength;
}int CXzmBaseFuncLib::Utf8ToUS2(LPCSTR pSrc, WCHAR** pDst) throw()
{WCHAR *strW = NULL;int iLength = ::MultiByteToWideChar(CP_UTF8,0,pSrc,-1,NULL,0);if(!iLength)return 0;iLength++;ATLTRY(strW = new WCHAR[iLength]);if(NULL == strW)return 0;::memset(strW,0,iLength*sizeof(WCHAR));int iLength1=::MultiByteToWideChar(CP_UTF8,0,pSrc,-1,strW,iLength-1);*pDst=strW;return iLength1;
}CString CXzmBaseFuncLib::GBKToGB2312(const CString &strSrc)
{DWORD dwErrCode = 0;CString strDest(_T(""));DWORD wLanguageID = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_BIG5);int nLen = ::LCMapString(wLanguageID,LCMAP_SIMPLIFIED_CHINESE,strSrc,-1,NULL,0);WCHAR *szDest = NULL;if(nLen){nLen++;szDest = new WCHAR[nLen];}elsedwErrCode = ::GetLastError();if(NULL == szDest)return strDest;memset(szDest,0,sizeof(WCHAR)*nLen);nLen = ::LCMapString(wLanguageID,LCMAP_SIMPLIFIED_CHINESE,strSrc,-1,szDest,nLen); if(NULL != szDest){strDest = szDest;delete []szDest;szDest = NULL;}return strDest;
}CString CXzmBaseFuncLib::GB2312ToGBK(const CString &strSrc)
{DWORD dwErrCode = 0;CString strDest(_T(""));DWORD wLanguageID = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);int nLen = ::LCMapString(wLanguageID,LCMAP_TRADITIONAL_CHINESE,strSrc,-1,NULL,0);WCHAR *szDest = NULL;if(nLen){nLen++;szDest = new WCHAR[nLen];}elsedwErrCode = ::GetLastError();if(NULL == szDest)return strDest;memset(szDest,0,sizeof(WCHAR)*nLen);nLen = ::LCMapString(wLanguageID,LCMAP_TRADITIONAL_CHINESE,strSrc,-1,szDest,nLen); if(NULL != szDest){strDest = szDest;delete []szDest;szDest = NULL;}return strDest;
}CString CXzmBaseFuncLib::PercentStringDecode(const CString& strSrc,BOOL bUtf8 /*= FALSE*/)
{char *szBuf = NULL;char cTem[8192] = {};int nLen = strSrc.GetLength(),nC = 0;for(int nIndex = 0;nIndex < nLen;){CString strVal(_T(""));WCHAR wc = strSrc.GetAt(nIndex);if(wc != _T('%')){cTem[nC] = (char)wc;nC++;nIndex++;continue;}nIndex++;if(nIndex < nLen){strVal += strSrc.GetAt(nIndex);nIndex++;}if(nIndex < nLen){strVal += strSrc.GetAt(nIndex);nIndex++;}CXzmBaseFuncLib::Us2ToChar(strVal,&szBuf);cTem[nC] = (char )strtoul(szBuf, NULL, 16);nC++;delete []szBuf;szBuf = NULL;if(nC >= 8192)break;}if(bUtf8){CXzmBaseFuncLib::Utf8ToChar(cTem,&szBuf);CString strReturn(szBuf);delete []szBuf;szBuf = NULL;return strReturn;}else{CString strReturn(cTem);return strReturn;}
}BYTE CXzmBaseFuncLib::toHex(const BYTE &x)
{return x > 9 ? x + 55: x + 48;
}CString CXzmBaseFuncLib::NumToStr(LONGLONG i)
{CString strTemp(_T("")); if (i == 0){strTemp = _T("0");return strTemp;}LONGLONG dwNumber = i;while (dwNumber){TCHAR Temp = (TCHAR)(dwNumber % 10 + '0');strTemp.Insert(0,Temp);dwNumber = dwNumber / 10;}return strTemp;
}DWORD CXzmBaseFuncLib::StrToNum(const CString& strTemp)
{DWORD dwValue = 0;if(strTemp.IsEmpty())return dwValue;for (int j = 0; j < strTemp.GetLength(); j++){TCHAR c = strTemp[j];if (c <= '9' && c >= '0'){dwValue *= 10;dwValue = (dwValue + (c - '0')) ; }}return dwValue;
}void CXzmBaseFuncLib::StrToNum2(const CString& strTemp,DWORD &dwNum1,DWORD &dwNum2)
{dwNum1 =0;dwNum2 =0;if(strTemp.IsEmpty())return;DWORD dwValue = 0;int   j=0,nLen = strTemp.GetLength();for (j = 0; j < nLen; j++){TCHAR c = strTemp[j];if (c <= '9' && c >= '0'){dwValue *= 10;dwValue = (dwValue + (c - '0')) ; }if(nLen-8 == j){dwNum1 = dwValue;dwValue = 0;}}if(dwValue)dwNum2 = dwValue;
}void CXzmBaseFuncLib::ChangeToChar(byte *szSrc,int nLen,char *szDest)
{if(NULL == szSrc || NULL == szDest)return;char tmp[4];for(int nIndex = 0;nIndex<nLen;nIndex++){memset(tmp,0,4);_itoa_s(szSrc[nIndex],tmp,4,16);if(strlen(tmp)<2)strcat_s(szDest,MAX_PATH,"0");strcat_s(szDest,MAX_PATH,tmp);}
}BOOL CXzmBaseFuncLib::IsPathExist(const CString& strPath) throw()
{BOOL bRet = FALSE;if(strPath.IsEmpty())return bRet;WIN32_FIND_DATA    data;BOOL bFindDir = FALSE;CString strFind(strPath);if (0 == strPath.Right(1).CompareNoCase( _T("\\"))){/// 查找目录bFindDir = TRUE;strFind+=_T("*.*");}/*** @brief             FindFirstFile()** @Function          ** @param[  _In_   ]  ** @param[  _Out_  ]  ** @param[_Out_opt_]  ** @return            如果函数成功,则得到一个句柄,否则失败将得到值INVALID_HANDLE_VALUE** @Date xzm_@_2017/06/30  13:40:11*/HANDLE hFindFile = ::FindFirstFile(strFind,&data);if(INVALID_HANDLE_VALUE != hFindFile){if(bFindDir){while(INVALID_HANDLE_VALUE != hFindFile){if ((data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY ){bRet = TRUE;break;}/*** @brief             FindNextFile** @Function          ** @param[  _In_   ]  ** @param[  _Out_  ]  ** @param[_Out_opt_]  ** @return            如果函数成功,则返回值不为零,lpFindFileData 参数包含有关找到的下一个文件或目录的信息。*                    如果函数失败,则返回值为零,并且lpFindFileData的内容 是不确定的。要获取扩展错误信息,请调用 GetLastError函数。** @Date xzm_@_2017/06/30  13:40:11*/if (!FindNextFile(hFindFile,&data))break;}}elsebRet = TRUE;::FindClose(hFindFile);hFindFile = NULL;}elsebRet=FALSE;return bRet;
}

字符集编码转换--MFC相关推荐

  1. String构造方法和字符集编码转换

    2019独角兽企业重金招聘Python工程师标准>>> 声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础 ...

  2. php 设置字符集函数,PHP 数组字符集编码转换的函数

    摘要 腾兴网为您分享:PHP 数组字符集编码转换的函数,云南移动,学习计时,小米音乐,西餐菜谱等软件知识,以及酷狗旧版,摇骰子软件,易吧进销存软件,指南针,su楼梯插件,她趣,守卫剑阁大圣归来,vr设 ...

  3. 通过流进行字符集编码转换

    为什么80%的码农都做不了架构师?>>>    // 初始化文件输入流 tb_stream_ref_t istream = tb_stream_init_from_url(" ...

  4. php字符集编码转换,php编码转换_php编码转换函数

    摘要 腾兴网为您分享:php编码转换函数,云端学习,鱼乐贝贝,优品多多,一路捞等软件知识,以及天地图厦门,快剪辑app,java学习手册,酷狗2010,王者荣耀点券软件,xmart,有声小说软件,mp ...

  5. mysql字段编码转换_mysql字符集编码转换

    mysql库编码修改,库默认的编码为拉丁文,我创建的agilefant库编码也就是拉丁文的 不支持中文.整个操作过程切记务必先备份库再操作.mysql> show variables like ...

  6. java字符集编码是,java字符集与编码有关问题

    java字符集与编码问题 没想到自己的第一篇javaeye博客就是让人头痛的java字符集转码问题,下面是我个人的一些认识与网上收集的代码.在java中String在JVM里是unicode的,任何b ...

  7. c语言 字符映射表,字符集编码与 C/C++ 源文件字符编译乱弹(收集转载)

    最近在看国际化编程 (i18n:internationalization) 的东西,也弄清楚了点字符集有关的一些问题,其实网上的一些牛人已经将字符集.Unicode 等相关的问题说的很清楚了,我在这里 ...

  8. 小工具———字符编码转换查看(MFC)

    -------------------------- 2020年6月4日09:38:54 更新 请移步另外一个简便完善版本工具 https://blog.csdn.net/xuebing1995/ar ...

  9. VC编写自己构造http协议数据的post上传图片类(MFC环境 带编码转换)(转)

    上次用VC写了个MFC环境下的post数据类,地址: /Html/diannaojishu/2009-10/4905858580.html 这次将这个类进行扩展,可以post图片.但这两个post所使 ...

最新文章

  1. 4种方法可以缓解网络瓶颈
  2. 2018全国计算机考试报名入口,北京2018年3月全国计算机等级考试报名入口
  3. 使用jpmml-sparkml-executable生成PMML模型文件
  4. python可以写桌面软件吗-Python学习,给自己的代码做个合集,定制自己的桌面软件!...
  5. JACK——PaintRobot Exercise9
  6. Lowest Common Ancestor of a Binary Search Tree a Binary Tree
  7. 字符串左侧补0_(48)C++面试之最长不含重复字符的子字符串(动态规划)
  8. linux 命令mysql5.6,linux下mysql5.5mysql5.6的tar包安装
  9. ssh相关命令Linux,Linux SSH常用命令 [长期更新]...
  10. mysql怎么导入sql文件_如何将sql文件导入mysql
  11. 【通达信指标公式】多空分时幅图指标,股票期货T+0经典分时指标
  12. 自抗扰控制器-1.跟踪微分器 TD
  13. Your Uninstaller! 注册码
  14. J2EE进阶之自定义标签,JSTL标签,国际化 十四
  15. 揭开神秘的莫比乌斯环异形创意LED显示屏的柔性显示之美。
  16. 使用000webhost.com免费主机搭建一个WordPress站点
  17. 计算机怎么给硬盘加密,电脑上的硬盘如何加密?几种文件加密的方法
  18. 关于ubuntu系统不显示wifi图标或WiFi无法连接问题解答
  19. 20.EC实战 笔记本电脑的休眠唤醒是如何实现的
  20. C语言——计算数组长度

热门文章

  1. 485通讯协议_HART协议和RS485协议有什么区别?
  2. STM32F103单片机读取芯片自身ID
  3. Linux学习笔记---常用shell命令
  4. 利用TCN网络实现MNIST手写体数据集的识别
  5. arch_version(12) of input model should be 11!
  6. for 2018.12.3
  7. micronaut pk spring boot
  8. 双网卡centos7 iptables防火墙与/etc/rc.d/rc.local开机运行
  9. 《IT蓝豹》PlayNewsStandDemo资讯类新闻客户端框架
  10. case when then else end 用法