UniCode 下CString 轉 char*,利用WideCharToMultiByte進行轉換,中文亂碼的解決方案

來源:互聯網
上載者:User

 

UniCode 下 CString 轉 char* 的方法的文章有很多,但是大部分都是在互相轉載,看了那麼多資料,仍然沒有解決亂碼的問題,後來從一個論壇的一條回複裡面找到了正確的方法,特此拿出來與大家分享。

先總結一下網上找到的三種轉換的方法:

方法一:使用函數setlocale

    setlocale(LC_ALL,"chs");

    需要包含標頭檔#include <locale.h>

    此方法的思路是配置地區化資訊。通常在需要輸入輸出中文的時候設定一下,就沒問題了,setlocale詳情 點我

 

方法二:使用函數:T2A、W2A

             CString str = _T("D://校內項目//QQ.bmp");

              //宣告身份識別符
             USES_CONVERSION;

             //調用函數,T2A和W2A均支援ATL和MFC中的字元轉換
             char *
pFileName = T2A(str);   
             //char * pFileName =
W2A(str); //也可實現轉換

            注意:有時候可能還需要添加引用#include   <afxpriv.h>

    使用此方法要注意宣告身份識別符,T2A、W2A詳情 點我

方法三:使用API:WideCharToMultiByte進行轉換

              CString str = _T("D://校內項目//QQ.bmp");

            //注意:以下n和len的值大小不同,n是按字元計算的,len是按位元組計算的
              int n =
str.GetLength();     // n = 14, len = 18

             //擷取寬位元組字元的大小,大小是按位元組計算的
             int len
= WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),NULL,0,NULL,NULL);

             //為多位元組字元數組申請空間,數組大小為按位元組計算的寬位元組位元組大小
            char *
pFileName = new char[len+1];   //以位元組為單位

            //寬位元組編碼轉換成多位元組編碼
            WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),pFileName,len,NULL,NULL);

           
WideCharToMultiByte(CP_ACP,0,str,str.GetLength() + 1 ,pFileName,len + 1
,NULL,NULL);

             pFileName[len+1] = '/0';  
//多位元組字元以'/0'結束

      //多謝樓下的提醒,特此修改一下     

      pFileName[len] = '\0';   //多位元組字元以'\0'結束

 這三種方法都是感覺比較靠譜的,也有很多人驗證了可以成功,但是在我用的時候很悲催,三種方法都不行,經過仔細的考慮,發現第三種方法應該是萬無一失,最保險的方法啊,後來經過仔細尋找,原來是參數出了問題,黃色被我劃掉的是網上流傳的比較廣泛的方法,WideCharToMultiByte(CP_ACP,0,str,str.GetLength() + 1 ,pFileName,len + 1 ,NULL,NULL);是我驗證成功的寫法,至於為什麼是這樣,留給大家自己思考。WideCharToMultiByte詳情 點我

小弟才疏學淺,寫的不對,敬請指正!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.