Sdílet prostřednictvím


Souhrn programování Unicode

Chcete-li využít knihovnu MFC a podporu jazyka C za běhu pro kódování Unicode, je třeba:

  • Definovat _UNICODE.

    Definovat symbol _UNICODE před sestavením programu.

  • Určit vstupní bod.

    Na stránce Výstup složky propojovacího programu v dialogovém okně Stránky vlastností projektu, nastavte symbol vstupního bodu wWinMainCRTStartup.

  • Použíjte přenostitelné běhové funkce a typy.

    Použíjte vhodné běhové funkce jazyka C pro zpracování řetězce kódování Unicode.Můžete použít rodinu funkcí wcs, ale pravděpodobně budete preferovat plně přenositelné (mezinárodně povolené) makra _TCHAR.Tato makra jsou všechny s předponou _tcs; navzájem se nahrazují pro rodinu funkcí str.Tyto funkce jsou podrobně popsány v sekci InternacionalizaceReference běhové knihovny.Další informace naleznete v tématu Mapování obecného textu v Tchar.h.

    Použíjte _TCHAR a související přenosítelné datové typy, popsané v Podpora kódování Unicode.

  • Vhodné zpracování řetězců literálu.

    Kompilátor jazyka Visual C++ interpretuje řetězec literálu kódovaný jako:

    L"this is a literal string"
    

    pro porozumění řetězce znaků kódování Unicode.Můžete použít stejnou předponou pro znaky literálu.Použíjte makro _T do kódu obecných řetězců literálu, takže jsou kompilovány jako řetězce Unicode v kódování Unicode nebo řetězce ANSI (včetně znakové sady MBCS) bez kódování Unicode.Například namísto kódu:

    pWnd->SetWindowText( "Hello" );
    

    použití:

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

    S definovaným _UNICODE, překládá _T řetězcový literál do formy předpony L; jinak _T převede řetězec bez předpony L.

    Tip

    Makro _T je totožné s makrem _TEXT.

  • Předávejte opatrně délky řetězců funkcím.

    Některé funkce chtějí počet znaků v řetězci; ostatní chtějí počet bajtů.Například pokud je definován _UNICODE, následující volání objektu CArchive nebude fungovat (str je CString):

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

    V Unicode aplikaci Vám délka poskytne počet znaků, ale nesprávný počet bajtů, protože každý znak je dvoubajtový.Místo toho musíte použít:

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

    který určuje správný počet bajtů pro zápis.

    Avšak členské funkce knihovny MFC, které jsou zaměřené na znak, spíše než na bajt, pracují bez extra kódování:

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

    CDC::TextOut bere počet znaků, ne počet bajtů.

  • Použíjte fopen_s _wfopen_s pro otevření souborů kódování Unicode.

Pro shrnutí, knihovna MFC a běhová knihovna, obsahují následující podporu programování kódování Unicode v systému Windows 2000:

  • S výjimkou členských funkcí databázové třídy, podporují všechny funkce knihovny MFC kódování Unicode, včetně CString. CString také poskytuje funkce převodu Unicode/ANSI.

  • Běhová knihovna poskytuje Unicode verze všech funkcí, které zpracovávájí řetězec.(Běhová knihovna také poskytuje přenositelné verze vhodné pro kódování Unicode nebo znakovou sadu MBCS.Jedná se o makra _tcs.)

  • Tchar.h poskytuje přenositelné datové typy a makro _T pro převod řetězců literálu a znaků.Další informace naleznete v tématu Mapování obecného textu v Tchar.h.

  • Běhová knihovna obsahuje verze širokého znaku main.Použíjte wmain pro uvědomění Vaší aplikaci do kódování Unicode.

Viz také

Koncepty

Podpora pro Unicode