Włączanie internacjonalizacji
Większość tradycyjnego kodu C i C++ przyjmuje założenia dotyczące manipulowania znakami i ciągami, które nie działają dobrze w przypadku aplikacji międzynarodowych. Mimo że zarówno MFC, jak i biblioteka czasu wykonywania obsługują standard Unicode lub MBCS, nadal możesz wykonać pracę. W tej sekcji opisano znaczenie "włączania międzynarodowego" w języku Visual C++:
Zarówno Unicode, jak i MBCS są włączone za pomocą przenośnych typów danych na listach parametrów funkcji MFC i zwracanych typach. Te typy są definiowane warunkowo w odpowiedni sposób, w zależności od tego, czy kompilacja definiuje symbol
_UNICODE
, czy symbol_MBCS
(co oznacza DBCS). Różne warianty bibliotek MFC są automatycznie połączone z aplikacją, w zależności od tego, które z tych dwóch symboli definiuje kompilacja.Kod biblioteki klas używa przenośnych funkcji czasu wykonywania i innych środków w celu zapewnienia poprawnego zachowania Unicode lub MBCS.
Nadal musisz obsługiwać pewne rodzaje zadań międzynarodowych w kodzie:
Użyj tych samych przenośnych funkcji czasu wykonywania, które sprawiają, że MFC jest przenośna w obu środowiskach.
Ustaw ciągi literału i znaki przenośne w obu środowiskach przy użyciu makra
_T
. Aby uzyskać więcej informacji, zobacz Ogólne mapowania tekstu w pliku tchar.h.Podejmij środki ostrożności podczas analizowania ciągów w mbcs. Te środki ostrożności nie są wymagane w formacie Unicode. Aby uzyskać więcej informacji, zobacz MBCS Programming Tips (Porady dotyczące programowania MBCS).
Pamiętaj, aby mieszać znaki ANSI (8-bitowe) i Unicode (16-bitowe) w aplikacji. Istnieje możliwość użycia znaków ANSI w niektórych częściach programu i znaków Unicode w innych, ale nie można ich mieszać w tym samym ciągu.
Nie należy zapisywać ciągów w kodzie w aplikacji. Zamiast tego utwórz je jako zasoby STRINGTABLE, dodając je do pliku RC aplikacji. Następnie aplikację można lokalizować bez konieczności wprowadzania zmian w kodzie źródłowym lub ponownej kompilacji. Aby uzyskać więcej informacji na temat zasobów STRINGTABLE, zobacz Edytor ciągów.
Uwaga
Europejskie i MBCS mają pewne znaki, takie jak litery wyróżniające, z kodami znaków większymi niż 0x80. Ponieważ większość kodu używa znaków ze znakiem, te znaki większe niż 0x80 są rozszerzane podczas konwersji na int
. Jest to problem z indeksowaniem tablicy, ponieważ znaki rozszerzone znaki są ujemne, indeksy poza tablicą. Języki korzystające z MBCS, takie jak japoński, są również unikatowe. Ponieważ znak może składać się z 1 lub 2 bajtów, zawsze należy manipulować obydwoma bajtami w tym samym czasie.