c++字元處理引出的問題

來源:互聯網
上載者:User
字元編碼的問題

C/C++發展的過程很長,早期的字元都是Multibyte的形式,後期為了處理多國語言增加了Unicode,因此比JAVA和C#這些後來者內建的字元是Unicode的支援,在處理時需要注意。

I18n Internationalization:國際化的簡寫

l10n localization 本地化的簡寫

ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_vccrt/html/ee536a04-3558-4729-8e10-6dabcde055fd.htm Internationalization

ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_vccrt/html/4e573c05-8800-468b-ae5f-76ff7409835e.htm Data Type Mappings

ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_vccrt/html/a03de0db-8118-4bd9-a03f-640e8dfc5ed3.htm A Sample Generic-Text Program

字元初始化

Genreic

[和編譯類別有關,Unicode編譯時間是Unicode]

       _TCHAR buff[_MAX_PATH] = {TEXT("hello")};
        TCHAR *s1 = _T("tchar with compile option");
        TCHAR *s2 = _TEXT("tchar");

Unicode

       wchar_t *wmsg = L"Is";
        WCHAR *uc = L"Is uc";

MBCS

       char *amsg = "Reversed";
字元轉換

Windows

WideCharToMultiByte

MultiByteToWideChar

當然MFC ATL和相關的庫有相關的轉換輔助函數,可在這些原始碼中找到
(如c:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include\atlcomcli.h 
中A2WBSTR)

iconv

GNU開源的組件,多種字元編碼的轉換

跨平台

例子
/*通過 CComBSTR(_In_opt_z_ LPCSTR pSrc) 建構函式
申請空間SysAllocStringLen
字元轉碼MultiByteToWideChar 放到動態空間m_str成員
改進方法:直接使用Unicode賦值,因此對於TCHAR WCHAR _T TEXT L 這些輔助的字元處理函數和宏要熟悉
text = L"demo";*/CComBSTR text = "demo";以下是從一個實際的軟體代碼中節選的錯誤使用方式
#include <string>using namespace std ; void Demo(BSTR bstrlibName){_bstr_t bstr_name(bstrlibName);string strName;strName = bstr_name;strName = strName.substr(1);//¡. CString next(strName.c_str());//Process¡//¡}
分析
以上代碼是不同人維護引入的,估計是由於不同人員熟悉和使用的庫不一樣,比如甲熟悉stl, 乙熟悉MFC,…,不過這樣的代碼匯在一起,
如果在要求效率的地方,那麼以上的代碼存在很大的效率隱患。
只要在VS中定位到STL MFC等這些類的代碼,就可以知道,這樣的對象在使用過程中進行n多的空間申請和賦值等。
 
可能的改進方法
Ø  如以上傳入是BSTR,因此一般情況下最好直接使用這個類型處理,不要引入不必要的對象轉換
Ø  也有可能某人想使用已有的對象提供的函數減少不必要的編碼,此時最好只引入一個類,或則STL,或則CString等
(此時選擇的類最好是和BSTR配套的如wstring,以減少轉換問題)
Ø  為了在項目中更通用,其實也可以封裝一個針對項目特殊處理的類以減少轉換和減少空間申請問題
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.