123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #include "StdAfx.h"
- #include "CodePageConvert.h"
- /******************************************************************************
- 把源串转换为宽字符串
- ******************************************************************************/
- bool MBToWC(wstring & strWC, string strSrc, UINT uiSrcCodePage)
- {
- //获取转换为宽字符编码所需的长度
- if (strSrc == "")
- {
- strWC = L"";
- return true;
- }
- int nNeedSizeWC = MultiByteToWideChar(uiSrcCodePage, 0
- , strSrc.c_str(), -1, NULL, 0);
- if (nNeedSizeWC <= 0)
- {
- return false;
- }
- //分配足够的字符串空间,减去结束符
- strWC.resize(nNeedSizeWC - 1);
- //进行转换
- if ((int)strWC.size() < nNeedSizeWC - 1)
- {
- return false;
- }
- int nSizeWC = MultiByteToWideChar(uiSrcCodePage, 0
- , strSrc.c_str(), -1
- , (LPWSTR)strWC.c_str(), nNeedSizeWC);
- if (nSizeWC <= 0)
- {
- return false;
- }
- return true;
- }
- /******************************************************************************
- 把宽字符串转换为目标串
- ******************************************************************************/
- bool WCToMB(string & strDst, wstring strWC, UINT uiDstCodePage)
- {
- //获取转换为目标字符编码所需的长度
- if (strWC == L"")
- {
- strDst = "";
- return true;
- }
- int nNeedSizeMB = WideCharToMultiByte(uiDstCodePage, 0
- , strWC.c_str(), -1, NULL, 0, NULL, NULL);
- if (nNeedSizeMB <= 0)
- {
- return false;
- }
- //分配足够的字符串空间
- strDst.resize(nNeedSizeMB - 1);
- //进行转换
- if ((int)strDst.size() < nNeedSizeMB - 1)
- {
- return false;
- }
- int nSizeA = WideCharToMultiByte(uiDstCodePage, NULL, strWC.c_str()
- , -1, (LPSTR)strDst.c_str(), nNeedSizeMB, NULL, NULL);
- if (nSizeA <= 0)
- {
- return false;
- }
- return true;
- }
- /******************************************************************************
- 把源串转换为目标串
- ******************************************************************************/
- bool MBToMB(string & strTrans
- , UINT uiDstCodePage, UINT uiSrcCodePage)
- {
- //先把源串转换为宽字符串
- if (strTrans == "")
- {
- return true;
- }
- wstring strWC = L"";
- if (!MBToWC(strWC, strTrans, uiSrcCodePage))
- {
- return false;
- }
- if (strWC == L"")
- {
- return false;
- }
- //再把宽字符串转换为目标串
- if (!WCToMB(strTrans, strWC, uiDstCodePage))
- {
- return false;
- }
- if (strTrans == "")
- {
- return false;
- }
- return true;
- }
|