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:

  • Definujte _UNICODE.

    Před sestavením programu definujte symbol _UNICODE .

  • Zadejte vstupní bod.

    Na stránce Pokročilé ve složce Linker v dialogovém okně Stránky vlastností projektu nastavte symbol vstupního bodu na wWinMainCRTStartup.

  • Používejte přenosné funkce a typy v běhovém prostředí.

    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í prostředí referenční dokumentaci knihovny běhového prostředí. 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ávejte řetězce literálů.

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

    L"this is a literal string"
    

    znamenat řetězec znaků Unicode Stejnou předponu můžete použít pro literální znaky. Makro _T použijte ke kódování literálových řetězců obecně, aby se kompilovaly jako řetězce Unicode, pokud používáte Unicode, nebo jako řetězce ANSI (včetně MBCS) bez Unicode. Například místo:

    pWnd->SetWindowText( "Hello" );
    

    použijte:

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

    Je-li _UNICODE definováno, _T přeloží textový řetězec do podoby s předponou L; v opačném případě _T přeloží řetězec bez předpony L.

    Návod

    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říd databází podporují všechny funkce MFC Unicode, včetně CString. CString poskytuje také funkce převodu Unicode/ANSI.

  • Běhová knihovna poskytuje verze Unicode všech řetězcových funkcí. (Knihovna runtime také poskytuje přenosné verze vhodné pro Unicode nebo MBCS. Toto jsou _tcs makra.)

  • tchar.h nabízí přenositelné datové typy a makro _T pro překlad literální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žijte wmain, aby vaše aplikace správně pracovala s Unicode.

Viz také

Podpora pro Unicode