VC开发char wchar utf8 gbk字符转换

1 char* 转换为wchar_t

[cpp]  view plain  copy
  1. //char* to wchar_t  
  2. wchar_t wfilename[256] ={0};  
  3. char filename[] = {"c://init.properties"};  
  4. ulBytes = MultiByteToWideChar(CP_ACP,0,filename,-1,NULL,0);  
  5. ulBytes = MultiByteToWideChar(CP_ACP,0,filename,-1,wfilename,ulBytes);  

2 wchar_t 转换为char*

[cpp]  view plain  copy
  1. //wchar_t to char*  
  2. ulBytes = WideCharToMultiByte(CP_ACP,0, wfilename,-1,NULL,0,NULL,NULL);  
  3. ulBytes = WideCharToMultiByte(CP_ACP,0, wfilename,-1, filename,ulBytes,NULL,NULL);  
    

3 unicode to utf-8

[cpp]  view plain  copy
  1. int UniToUTF8(CString strUnicode,char *szUtf8)  
  2. {  
  3.     //MessageBox(strUnicode);  
  4.     int ilen = WideCharToMultiByte(CP_UTF8, 0, (LPCTSTR)strUnicode, -1, NULL, 0, NULL, NULL);   
  5.     char *szUtf8Temp=new char[ilen + 1];  
  6.     memset(szUtf8Temp, 0, ilen +1);   
  7.     WideCharToMultiByte (CP_UTF8, 0, (LPCTSTR)strUnicode, -1, szUtf8Temp, ilen, NULL,NULL);   
  8.     //size_t a = strlen(szUtf8Temp);  
  9.     sprintf(szUtf8, "%s", szUtf8Temp);//   
  10.     delete[] szUtf8Temp;   
  11.     return ilen;  
  12. }  

 

4. GBK to utf-8

[cpp]  view plain  copy
  1. void ConvertGBKToUtf8(CString& strGBK)  
  2. {  
  3.     int len=MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK, -1, NULL,0);  
  4.     unsigned short * wszUtf8 = new unsigned short[len+1];  
  5.     memset(wszUtf8, 0, len * 2 + 2);  
  6.     MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK, -1, wszUtf8, len);  
  7.   
  8.     len = WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, NULL, 0, NULL, NULL);  
  9.     char *szUtf8=new char[len + 1];  
  10.     memset(szUtf8, 0, len + 1);  
  11.     WideCharToMultiByte (CP_UTF8, 0, wszUtf8, -1, szUtf8, len, NULL,NULL);  
  12.       
  13.     strGBK = szUtf8;  
  14.     delete[] szUtf8;  
  15.     delete[] wszUtf8;  
  16. }  

5. utf-8 to GBK

[cpp]  view plain  copy
  1. void ConvertUtf8ToGBK(CString& strUtf8)  
  2. {  
  3.     int len=MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, NULL,0);  
  4.     unsigned short * wszGBK = new unsigned short[len+1];  
  5.     memset(wszGBK, 0, len * 2 + 2);  
  6.     MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, wszGBK, len);  
  7.   
  8.     len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);  
  9.     char *szGBK=new char[len + 1];  
  10.     memset(szGBK, 0, len + 1);  
  11.     WideCharToMultiByte (CP_ACP, 0, wszGBK, -1, szGBK, len, NULL,NULL);  
  12.       
  13.     strUtf8 = szGBK;  
  14.     delete[] szGBK;  
  15.     delete[] wszGBK;  
  16. }  

6. 读写unicode 文件。

[cpp]  view plain  copy
  1. wchar_t* ReadUFile(wchar_t* path)  
  2. {  
  3.     CStdioFileEx    fileEx;  
  4.     fileEx.SetCodePage(CP_UTF8);  
  5.     CString         sText, sLine;  
  6.       
  7.     if(fileEx.Open(path, CFile::modeRead | CFile::typeText))  
  8.     {  
  9.           
  10.         // Read first 15 lines  
  11.         for (short nLineCount = 0; nLineCount < 16 && fileEx.ReadString(sLine); nLineCount++)  
  12.         {   
  13.             sText += sLine + sNEWLINE;  
  14.         }  
  15.         fileEx.Close();  
  16.     }  
  17.     return sResult.GetBuffer(sResult.GetLength());  
  18. }  
  19.   
  20.   
  21. bool WriteUFile(wchar_t* path,wchar_t* content)  
  22. {  
  23.     CStdioFileEx    fileEx;  
  24.     fileEx.SetCodePage(CP_UTF8);  
  25.     CString         sText, sLine;  
  26.     UINT                nWriteFlags = CFile::modeCreate | CFile::modeWrite | CFile::typeText;  
  27.     //nWriteFlags |= CStdioFileEx::modeWriteUnicode;  
  28.     if(fileEx.Open(path, nWriteFlags))  
  29.     {  
  30.         CString scontent = content;  
  31.         fileEx.WriteString(scontent);  
  32.         fileEx.Close();  
  33.         return true;  
  34.     }  
  35.     else  
  36.     {  
  37.         return false;  
  38.     }  
  39. }  

这里用到了 CStdioFileEx ,下载地址: http://files.cnblogs.com/tingsking/StdioFileEx.zip

 

7. 发送http 请求

[cpp]  view plain  copy
  1. void SendHttp()  
  2. {  
  3.     CString strData =”cardno=123456&address=张三”;  
  4.   
  5.     ConvertGBKToUtf8(strData);  
  6.     try  
  7.     {  
  8.         DWORD dwServiceType = AFX_INET_SERVICE_HTTP;  
  9.         CString szServer, szObject;  
  10.         INTERNET_PORT nPort;  
  11.         CString url;  
  12.         GetDlgItemText(IDC_EDIT_ADDRESS,url);  
  13.         AfxParseURL(url, dwServiceType, szServer, szObject, nPort);  
  14.         CInternetSession Session ;   
  15.         CHttpConnection *pHttpConnect = Session.GetHttpConnection(szServer,INTERNET_FLAG_KEEP_CONNECTION,nPort,NULL,NULL) ;  
  16.         if( pHttpConnect )  
  17.         {  
  18.             CHttpFile* pFile = pHttpConnect->OpenRequest( CHttpConnection::HTTP_VERB_POST, szObject);  
  19.             if ( pFile )  
  20.             {  
  21.                 CString strHead = _T("Content-Type: application/x-www-form-urlencoded") ;  
  22.                 pFile->AddRequestHeaders("Accept: */*");   
  23.                 pFile->AddRequestHeaders("Accept-Language: zh-cn");   
  24.                 pFile->AddRequestHeaders("Accept-Encoding: gzip");   
  25.                 pFile->AddRequestHeaders("Accept-Charset: utf-8");   
  26.                 ret = pFile->SendRequest( strHead ,(LPVOID)(LPCTSTR)strData ,strData.GetLength() );  
  27.                   
  28.                 pFile->Close();  
  29.                 delete pFile ;  
  30.             }  
  31.               
  32.               
  33.             pHttpConnect->Close() ;  
  34.             delete pHttpConnect ;  
  35.         }  
  36. }  
  37.     catch( CInternetException *e )  
  38.     {  
  39.         e->Delete();      
  40.     }   
  41. }  
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值