Sdílet prostřednictvím


Souhrn programování s kódem Unicode

Pokud chcete využít podporu prostředí MFC a běhu jazyka C pro Unicode, musíte:

  • Definovat _UNICODE.

    Před sestavením programu definujte symbol _UNICODE .

  • Zadejte vstupní bod.

    Na stránce Upřesnit složky Linker v dialogovém okně Stránky vlastností projektu nastavte symbol vstupního bodu na wWinMainCRTStartup.

  • Používejte přenosné funkce a typy za běhu.

    Pro zpracování řetězců Unicode použijte správné funkce běhu jazyka C. Můžete použít wcs řadu funkcí, ale možná dáváte přednost plně přenosným (mezinárodně povoleným) _TCHAR makrům. Všechna tato makra mají předponu _tcs; nahrazují jednu za jedno pro str řadu funkcí. Tyto funkce jsou podrobně popsány v části Mezinárodní inicializace v referenční dokumentaci knihovny run-time. Další informace naleznete v tématu Mapování obecného textu v tchar.h.

    Používejte _TCHAR a související přenosné datové typy popsané v tématu Podpora kódování Unicode.

  • Správně zpracovává řetězce literálů.

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

    L"this is a literal string"
    

    znaménkou znaky Unicode. Stejnou předponu můžete použít pro literální znaky. _T Makro použijte k kódování literálových řetězců obecně, takže se kompilují jako řetězce Unicode v kódování Unicode nebo jako řetězce ANSI (včetně MBCS) bez unicode. Například místo:

    pWnd->SetWindowText( "Hello" );
    

    použijte:

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

    Při _UNICODE definování _T přeloží literálový řetězec do formuláře s předponou L. V opačném případě _T přeloží řetězec bez předpony L.

    Tip

    Makro _T je shodné s _TEXT makrem.

  • Dávejte pozor při předávání délky řetězců funkcím.

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

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

    V aplikaci Unicode poskytuje délka počet znaků, ale ne správný počet bajtů, protože každý znak je široký 2 bajty. Místo toho musíte použít:

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

    určuje správný počet bajtů k zápisu.

    Členské funkce MFC, které jsou orientované na znaky, nikoli na bajty, ale fungují bez tohoto dodatečného kódování:

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

    CDC::TextOut přebírá několik znaků, nikoli počet bajtů.

  • K otevření souborů Unicode použijte fopen_s _wfopen_s .

Prostředí MFC a knihovna runtime poskytují následující podporu programování v kódování Unicode:

  • Kromě členských funkcí třídy databáze jsou všechny funkce MFC povolené kódování Unicode, včetně CString. CString poskytuje také funkce převodu Unicode/ANSI.

  • Knihovna za běhu poskytuje verze Unicode všech funkcí pro zpracování řetězců. (Knihovna za běhu také poskytuje přenosné verze vhodné pro Unicode nebo PRO MBCS. Toto jsou _tcs makra.)

  • tchar.h poskytuje přenosné datové typy a _T makro pro překlad literálových řetězců a znaků. Další informace naleznete v tématu Mapování obecného textu v tchar.h.

  • Knihovna runtime poskytuje širokoznakovou verzi main. Používá wmain se k tomu, aby vaše aplikace věděla unicode.

Viz také

Podpora pro Unicode