Zestawy znaków dwubajtowych
Zestaw znaków dwubajtowych (DBCS), nazywany również "rozszerzonym zestawem znaków 8-bitowych", jest rozszerzonym zestawem znaków jednobajtowych (SBCS), zaimplementowanym jako strona kodowa. DbCSs zostały pierwotnie opracowane w celu rozszerzenia projektu SBCS do obsługi języków takich jak japoński i chiński. Niektóre znaki w dbCS, w tym cyfry i litery używane do pisania języka angielskiego, mają wartości kodu jedno bajtowego. Inne znaki, takie jak chińskie ideografy lub japoński kanji, mają wartości kodu dwubajtowego. DbCS może odpowiadać stronie kodowej systemu Windows lub stronie kodowej producenta OEM. Strona kodowa DBCS może również zawierać nie natywną stronę kodową, na przykład stronę kodową EBCDIC. Aby uzyskać definicje tych stron kodu, zobacz Code Pages.
Nuta
Nowe aplikacje systemu Windows powinny używać Unicode, aby uniknąć niespójności różnych stron kodu i łatwość lokalizacji. Jednak niektóre starsze protokoły mogą wymagać użycia stron kodowych DBCS. Każda strona kodowa DBCS obsługuje różne znaki, ale żadna strona nie obsługuje pełnej szerokości znaków dostarczonych przez Unicode. Każda strona kodowa DBCS obsługuje inny podzestaw, inaczej zakodowany. Dane przekonwertowane z jednej strony kodowej DBCS na inną mogą ulec uszkodzeniu, ponieważ ta sama wartość danych na różnych stronach kodu może kodować inny znak. Dane przekonwertowane z unicode na DBCS podlegają utracie danych, ponieważ dana strona kodowa może nie być w stanie reprezentować każdego znaku używanego w tych konkretnych danych Unicode.
Aby interpretować ciąg DBCS, aplikacja musi zaczynać się od początku ciągu i skanować dalej. Śledzi, kiedy napotka bajt ołowiu w ciągu i traktuje następny bajt jako część końcową tego samego znaku. Jeśli aplikacja po prostu skanuje ciąg jeden bajt jednocześnie i napotka bajt, który wydaje się być wartością kodu reprezentującą ukośnik odwrotny ("\"), ten bajt może być po prostu bajtem końcowym dwubajtowego znaku. Aplikacja nie może po prostu utworzyć kopii zapasowej jednego bajtu, aby sprawdzić, czy poprzedni bajt jest bajtem ołowiu, ponieważ ta wartość bajtu może być używana zarówno jako bajt główny, jak i bajt końcowy. W związku z tym aplikacja ma zasadniczo ten sam problem, co w przypadku ewentualnego ukośnika odwrotnego. Innymi słowy wyszukiwanie podciągów jest znacznie bardziej skomplikowane w przypadku usługi DBCS niż w przypadku SBCSs lub Unicode. W związku z tym aplikacje, które obsługują funkcję DBCS, muszą używać specjalnych funkcji, takich jak _mbsstr, zamiast funkcji StrStr.
Aplikacje używają stron kodu systemu Windows DBCS z wersjami "A" funkcji systemu Windows. Zobacz Conventions for Function Prototypes and Code Pages. Aby ułatwić identyfikację strony kodowej DBCS, aplikacja może użyć GetCPInfo lub funkcji GetCPInfoEx. Aplikacja może użyć funkcji IsDBCSLeadByte, aby określić, czy dana wartość może być używana jako bajt główny znaku 2-bajtowego. Ponadto aplikacja może używać funkcji MultiByteToWideChar i WideCharToMultiByte do mapowania między ciągami Unicode i DBCS.
Tematy pokrewne