windows编码转换

来源:互联网 发布:获取mac的最高权限 编辑:程序博客网 时间:2024/06/14 06:41
char* unicodeToUtf8(const TCHAR *zWideFilename){    int nByte;char *zFilename;nByte = WideCharToMultiByte(CP_UTF8, 0, zWideFilename, -1, 0, 0, 0, 0);zFilename = (char *)malloc(nByte);if(zFilename == 0){return 0;}nByte = WideCharToMultiByte(CP_UTF8, 0, zWideFilename, -1, zFilename, nByte, 0, 0);if( nByte == 0 ){free(zFilename);zFilename = 0;}return zFilename;    }char* unicodeToMbcs(const TCHAR *zWideFilename) {int nGb2312Len = WideCharToMultiByte(CP_ACP, 0, zWideFilename, -1, NULL, 0, NULL, NULL);char *pcGb2312=(char *)malloc(nGb2312Len + 1);//new char[nGb2312Len + 1]; memset(pcGb2312, 0, nGb2312Len + 1);WideCharToMultiByte(CP_ACP, 0, zWideFilename, -1, pcGb2312, nGb2312Len, NULL, NULL);return pcGb2312;}TCHAR* mbcsToUnicode(const char *zFilename)    {    int nByte;    TCHAR *zMbcsFilename;    int codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP;    nByte = MultiByteToWideChar(codepage, 0, zFilename, -1, NULL,0)*sizeof(WCHAR);    zMbcsFilename = (TCHAR *)malloc(nByte*sizeof(zMbcsFilename[0]));    if( zMbcsFilename==0 )    {    return 0;    }    nByte = MultiByteToWideChar(codepage, 0, zFilename, -1,   zMbcsFilename, nByte);    if(nByte == 0)    {    free(zMbcsFilename);    zMbcsFilename = 0;    }    return zMbcsFilename;    }   char* mbcsToUtf8( const char* zFilename ){TCHAR* pwFilename = mbcsToUnicode(zFilename);if(pwFilename == NULL)return NULL;char* pUtf8 = unicodeToUtf8(pwFilename);free(pwFilename);return pUtf8;}char* utf8ToMbcs( const char* zFilename ){int nUnicodeLen = MultiByteToWideChar(CP_UTF8, 0, zFilename, -1, NULL, 0);TCHAR * pcUnicode = new TCHAR[nUnicodeLen+1]; memset(pcUnicode, 0, nUnicodeLen * 2 + 2);//utf8 to unicodeMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, pcUnicode, nUnicodeLen);//unicode to gb2312int nGb2312Len = WideCharToMultiByte(CP_ACP, 0, pcUnicode, -1, NULL, 0, NULL, NULL);char *pcGb2312=(char *)malloc(nGb2312Len + 1);//new char[nGb2312Len + 1]; memset(pcGb2312, 0, nGb2312Len + 1);WideCharToMultiByte(CP_ACP, 0, pcUnicode, -1, pcGb2312, nGb2312Len, NULL, NULL);delete[] pcUnicode;return pcGb2312;}TCHAR* utf8ToUnicode(const char *zFilename) {int nUnicodeLen = MultiByteToWideChar(CP_UTF8, 0, zFilename, -1, NULL, 0);TCHAR * pcUnicode = new TCHAR[nUnicodeLen+1]; memset(pcUnicode, 0, nUnicodeLen * 2 + 2);//utf8 to unicodeMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, pcUnicode, nUnicodeLen);return pcUnicode;}//Converting a WChar string to a Ansi stringstd::string WChar2Ansi(LPCWSTR pwszSrc){int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL);if (nLen<= 0) return std::string("");char* pszDst = new char[nLen];if (NULL == pszDst) return std::string("");WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL);pszDst[nLen -1] = 0;std::string strTemp(pszDst);delete [] pszDst;return strTemp;}std::string ws2s(const std::wstring& ws) {return WChar2Ansi(ws.c_str()); }//Converting a Ansi string to WChar stringstd::wstring Ansi2WChar(LPCSTR pszSrc, int nLen){int nSize = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pszSrc, nLen, 0, 0);if(nSize <= 0) return NULL;//printf("size = %d\n", nSize);TCHAR *pwszDst = new TCHAR[nSize+1];if( NULL == pwszDst) return NULL;MultiByteToWideChar(CP_ACP, 0,(LPCSTR)pszSrc, nLen, pwszDst, nSize);pwszDst[nSize] = 0;if( pwszDst[0] == 0xFEFF)                    // skip Oxfefffor(int i = 0; i < nSize; i ++)pwszDst[i] = pwszDst[i+1];std::wstring wcharString(pwszDst);delete pwszDst;return wcharString;}std::wstring s2ws(const std::string& s) { return Ansi2WChar(s.c_str(),s.size());}

0 0
原创粉丝点击