#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; }