Share via


Unicode 程式設計摘要

若要使用 MFC 和 C 執行階段對 Unicode 的支援,您需要:

  • 定義 _UNICODE

    在建置您的程式之前定義 _UNICODE 符號。

  • 指定進入點。

    在專案的屬性頁對話方塊中的 [連結器] 資料夾的 [輸出] 頁面裡,請將 [進入點] 符號設定為 wWinMainCRTStartup

  • 使用可移植的執行階段函式和型別。

    使用適當的 C 執行階段函式來處理 Unicode 字串。 您可以使用 wcs 函式家族,但是可能較喜歡完全可移植的 (已國際化) _TCHAR 巨集。 這些巨集是以 _tcs 作字首;它們一對一的取代 str 函式家族。 這些函式會在《執行階段程式庫參考》的國際化章節裡有詳細說明。 如需詳細資訊,請參閱 TCHAR.H 裡泛用文字的對應

    使用 _TCHARUnicode 的支援裡說明的相關可移植的資料型別。

  • 適當的處理常值字串。

    Visual C++ 編譯器將編碼的常值字串解譯為:

    L"this is a literal string"
    

    來指 Unicode 字元的字串。 您可以對常值字元使用相同的前置詞。 使用 _T 巨集來對常值字串普遍地編碼,使其可在 Unicode 之下編譯為 Unicode 字串,或為沒有 Unicode 的 ANSI 字串 (包括 MBCS)。 例如,不使用:

    pWnd->SetWindowText( "Hello" );
    

    使用:

    pWnd->SetWindowText( _T("Hello") );
    

    定義 _UNICODE 之後,_T 將常值字串轉譯成以 L 為前置字元的形式,否則,_T 將字串轉譯成沒有 L 前置字元的字串。

    提示

    _T 巨集與 _TEXT 巨集相同。

  • 傳遞字串長度到函式時請小心。

    有些函式想要字串裡的字元數目;其他的則要位元組數目。 例如,如果 _UNICODE 有定義,下列對 CArchive 物件的呼叫將不會作用 (str 是 CString):

    archive.Write( str, str.GetLength( ) );    // invalid
    

    在 Unicode 應用程式裡,長度會給您字元的數目而不是正確的位元組數目,因為每一個字元為 2 個位元組寬。 反而,您必須使用:

    archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) );    // valid
    

    指定要撰寫的正確位元組數目。

    但是,以字元而非位元組為主的 MFC 成員函式,使用時不需要這行額外的程式碼:

    pDC->TextOut( str, str.GetLength( ) );
    

    CDC::TextOut 使用幾個字元,而不是幾個位元組。

  • 使用 fopen_s _wfopen_s 開啟 Unicode 檔案。

簡要說來,MFC 和執行階段程式庫可以為 Windows 2000 下的 Unicode 程式設計提供下列支援:

  • 除了資料庫類別成員函式之外,所有的 MFC 函式都支援 Unicode,包括 CStringCString 同時也提供 Unicode/ANSI 型別轉換函式。

  • 執行階段程式庫可以提供所有字串處理函式的 Unicode 版本 (此種執行階段程式庫也提供適合 Unicode 或 MBCS 的可移植版本。 這些是 _tcs 巨集)。

  • Tchar.h 提供可移植的資料型別和 _T 巨集來轉譯常值字串和字元。 如需詳細資訊,請參閱 TCHAR.H 裡泛用文字的對應

  • 執行階段程式庫可以提供 main 的寬字元版本。 使用 wmain 讓您的應用程式具備 Unicode 感知的特性。

請參閱

概念

Unicode 的支援