Podsumowanie programowania Unicode

Aby korzystać z obsługi MFC i języka C w czasie wykonywania dla Unicode, musisz:

  • Zdefiniuj ._UNICODE

    Zdefiniuj symbol _UNICODE przed utworzeniem programu.

  • Określ punkt wejścia.

    Na stronie Zaawansowane folderu Konsolidator w oknie dialogowym Strony właściwości projektu ustaw symbol punktu wejścia na wWinMainCRTStartupwartość .

  • Używaj przenośnych funkcji i typów czasu wykonywania.

    Użyj odpowiednich funkcji czasu wykonywania języka C na potrzeby obsługi ciągów Unicode. Możesz użyć wcs rodziny funkcji, ale możesz preferować w pełni przenośne (włączone na arenie międzynarodowej) _TCHAR makra. Wszystkie te makra są poprzedzone prefiksem _tcs; zastępują jedną dla str jednej dla rodziny funkcji. Te funkcje zostały szczegółowo opisane w sekcji Internationalization (Internationalization) w dokumentacji biblioteki czasu wykonywania. Aby uzyskać więcej informacji, zobacz Ogólne mapowania tekstu w pliku tchar.h.

    Użyj _TCHAR i powiązanych przenośnych typów danych opisanych w temacie Obsługa formatu Unicode.

  • Poprawnie obsłuż ciągi literału.

    Kompilator języka Visual C++ interpretuje ciąg literału zakodowany jako:

    L"this is a literal string"
    

    oznaczać ciąg znaków Unicode. Można użyć tego samego prefiksu dla znaków literałów. Użyj makra _T , aby kodować ciągi literałów w sposób ogólny, więc kompilują się jako ciągi Unicode w formacie Unicode lub jako ciągi ANSI (w tym MBCS) bez formatu Unicode. Na przykład zamiast:

    pWnd->SetWindowText( "Hello" );
    

    Użyj programu:

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

    Po _UNICODE zdefiniowaniu _T ciąg literału tłumaczy ciąg literału na postać prefiksu L. W przeciwnym razie _T tłumaczy ciąg bez prefiksu L.

    Napiwek

    Makro _T jest identyczne z makrem _TEXT .

  • Zachowaj ostrożność podczas przekazywania długości ciągów do funkcji.

    Niektóre funkcje chcą mieć liczbę znaków w ciągu; inne chcą liczby bajtów. Na przykład jeśli _UNICODE jest zdefiniowana, następujące wywołanie CArchive obiektu nie będzie działać (str jest ):CString

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

    W aplikacji Unicode długość daje liczbę znaków, ale nie poprawną liczbę bajtów, ponieważ każdy znak ma 2 bajty szerokości. Zamiast tego należy użyć:

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

    określa prawidłową liczbę bajtów do zapisu.

    Jednak funkcje składowe MFC, które są zorientowane na znaki, a nie zorientowane na bajty, działają bez tego dodatkowego kodowania:

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

    CDC::TextOut przyjmuje liczbę znaków, a nie liczbę bajtów.

  • Użyj fopen_s, _wfopen_s , aby otworzyć pliki Unicode.

Podsumowując, MFC i biblioteka czasu wykonywania zapewniają następującą obsługę programowania Unicode:

  • Z wyjątkiem funkcji składowych klasy bazy danych wszystkie funkcje MFC są włączone w formacie Unicode, w tym CString. CString Udostępnia również funkcje konwersji Unicode/ANSI.

  • Biblioteka czasu wykonywania dostarcza wersje Unicode wszystkich funkcji obsługi ciągów. (Biblioteka czasu wykonywania dostarcza również przenośne wersje odpowiednie dla unicode lub MBCS. _tcs Są to makra).

  • tchar.h dostarcza przenośne typy danych i _T makro do tłumaczenia ciągów literału i znaków. Aby uzyskać więcej informacji, zobacz Ogólne mapowania tekstu w pliku tchar.h.

  • Biblioteka środowiska uruchomieniowego udostępnia szeroką wersję programu main. Użyj wmain polecenia , aby aplikacja korzystała z formatu Unicode.

Zobacz też

Obsługa formatu Unicode