Strony kodowe
Większość aplikacji napisanych dzisiaj obsługuje dane znaków głównie jako Unicode, przy użyciu kodowania UTF-16. Jednak wiele starszych aplikacji nadal używa zestawów znaków na podstawie stron kodu. Nawet nowe aplikacje czasami muszą pracować ze stronami kodu, często z jednego z następujących powodów:
- Aby komunikować się ze starszymi aplikacjami.
- Aby komunikować się ze starszymi serwerami poczty i wiadomości, które mogą nie zawsze obsługiwać kod Unicode.
- Aby komunikować się z konsolą systemu Windows na potrzeby starszych wersji. (Konsola obsługuje kod Unicode, ale niektóre starsze narzędzia aplikacji wiersza polecenia mogą nie być).
Nuta
Nowe aplikacje systemu Windows powinny używać Unicode, aby uniknąć niespójności różnych stron kodu i łatwość lokalizacji.
Każda strona kodowa jest reprezentowana przez identyfikator strony kodowej, na przykład 1252 i jest obsługiwana przez funkcje interfejsu API zestawu znaków i Unicode. Aby uzyskać listę obsługiwanych identyfikatorów stron kodu, zobacz Identyfikatory stron kodowych. Dokumentacja "Stron kodu" w centrum deweloperów globalnych microsoft Go zawiera pełne opisy wielu stron kodu.
Strony kodu systemu Windows, często nazywane "stronami kodu ANSI", to strony kodowe, dla których wartości inne niż ASCII (wartości większe niż 127) reprezentują znaki międzynarodowe. Te strony kodu są używane natywnie w środowisku Windows Me i są również dostępne w systemie Windows NT i nowszych.
Nuta
Pierwotnie strona kodowa systemu Windows 1252, strona kodowa powszechnie używana dla języków angielskich i innych języków zachodnioeuropejskich, została oparta na wersji roboczej Amerykańskiego Narodowego Instytutu Standardów (ANSI). Ten projekt ostatecznie stał się ISO 8859-1, ale strona kodowa systemu Windows 1252 została zaimplementowana przed zakończeniem standardu i nie jest dokładnie taka sama jak ISO 8859-1.
Wiele funkcji interfejsu API systemu Windows ma wersje "A" (ANSI) i "W" (szeroki, Unicode). Wersja "A" obsługuje tekst na podstawie stron kodu systemu Windows, podczas gdy wersja "W" obsługuje tekst Unicode. Zobacz Typy danych systemu Windows dla ciągów i konwencji dla prototypów funkcji.
Strony kodu systemu Windows są również czasami nazywane "aktywnymi stronami kodu" lub "aktywnymi stronami kodu systemu". System operacyjny Windows zawsze ma jedną aktualnie aktywną stronę kodową systemu Windows. Wszystkie wersje funkcji interfejsu API ANSI używać aktualnie aktywnej strony kodu.
Strony kodowe producenta oryginalnego sprzętu (OEM) to strony kodowe, dla których wartości inne niż ASCII reprezentują rysowanie wierszy i znaki interpunkcyjne. Te strony kodu były pierwotnie używane do MS-DOS i są nadal używane w aplikacjach konsolowych. Są one również używane w systemach plików FAT12, FAT16 i FAT32, zgodnie z opisem w zestawów znaków używanych w nazwach plików. Zwykła strona kodowa producenta OEM dla języka angielskiego to strona kodowa 437.
W przypadku stron kodu systemu Windows i stron kodu OEM wartości kodu 0x00 przez 0x7F odpowiadają 7-bitowemu zestawowi znaków ASCII. Wartości kodu 0x00 za pośrednictwem 0x19 i 0x7F zawsze reprezentują standardowe znaki kontrolek i 0x20 przez 0x7E reprezentują standardowe znaki wyświetlane. Znaki reprezentowane przez pozostałe kody, 0x80 przez 0xff, różnią się w zależności od zestawów znaków. Każdy zestaw znaków zawiera różne znaki specjalne, zwykle dostosowane do języka lub grupy języków. Strona kodowa systemu Windows 1252 i strona kodowa OEM 437 są zwykle używane w Stanach Zjednoczonych.
Oprócz stron kodu systemu Windows i OEM aplikacje mogą używać stron kodu innych niż natywne. Przykłady to strony kodowe EBCDIC i Macintosh.
Dwa kodowania Unicode (UTF-7 i UTF-8) są implementowane jako strony kodu. Podobnie jak inne strony kodu, każda strona jest znana przez identyfikator liczbowy i może być obsługiwana przy użyciu wielu tych samych funkcji interfejsu API unicode i zestawu znaków.
Strony kodowe mogą być jednobajtowych stron zestawu znaków (SBCS) lub stron zestawu znaków dwubajtowych (DBCS). Na stronach SBCS każdy bajt bezpośrednio koduje pojedynczy znak, dzięki czemu możliwe jest reprezentowanie dokładnie 256 odrębnych znaków (w tym znaków kontrolnych, liter, cyfr, interpunkcji, symboli i podobnych). Strony kodowe DBCS są używane w językach, takich jak japoński i chiński. Na takiej stronie kodowej niektóre znaki mają kodowanie dwubajtowe z określonymi wartościami bajtów (zawsze większymi niż 127) służącymi jako "bajty ołowiu". Zamiast kodować znaki we własnym zakresie, bajty ołowiu mogą być mapowane na znak tylko w połączeniu z "bajtem końcowym".
Niektóre starsze protokoły wymagają użycia stron kodowych SBCS i DBCS. Każda strona kodowa SBCS/DBCS obsługuje różne znaki, ale żadna strona kodowa nie obsługuje pełnej szerokości znaków udostępnianych przez Unicode. Każda strona kodowa SBCS/DBCS obsługuje inny podzestaw, inaczej zakodowany.
Nuta
Dane przekonwertowane na jedną stronę kodową SBCS lub DBCS do innej są narażone na uszkodzenie, ponieważ ta sama wartość danych na różnych stronach kodu może kodować inny znak. Dane przekonwertowane z formatu Unicode na SBCS lub 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.
Oprócz stron kodowych SBCS i DBCS aplikacje mają dostępne wielobajtowe strony kodu 52936, 54936, 51949 i 5022x, które używają podejścia podobnego do tego dla dbCS. Strona kodowa zestawu znaków wielobajtowych wykracza jednak poza kodowanie dwubajtowe niektórych znaków. UtF-7 i UTF-8 używają podobnego podejścia do kodowania Unicode na podstawie odpowiednio 7-bitowych i 8-bitowych bajtów. Aby uzyskać więcej informacji, zobacz Unicode.
Kilka funkcji Unicode i zestawu znaków umożliwia aplikacjom obsługę stron kodu. Aplikacja może używać funkcji GetCPInfo i GetCPInfoEx w celu uzyskania informacji o stronie kodowej. Te informacje zawierają domyślny znak używany, gdy znak w przekonwertowanym ciągu nie ma odpowiedniego wpisu na stronie kodowej.
Aplikacja może używać funkcji MultiByteToWideChar i WideCharToMultiByte do konwertowania między ciągami opartymi na stronach kodu systemu Windows i ciągach Unicode. Chociaż ich nazwy odnoszą się do "MultiByte", te funkcje działają równie dobrze z SBCS, DBCS i wielobajtowymi stronami kodowymi zestawu znaków.
Nuta
WideCharToMultiByte może utracić dane, jeśli podana strona kodowa nie może reprezentować wszystkich znaków w ciągu Unicode.
Aplikacja może konwertować między stronami kodu systemu Windows i stronami kodu OEM przy użyciu standardowych funkcji biblioteki środowiska uruchomieniowego języka C. Jednak użycie tych funkcji stanowi ryzyko utraty danych, ponieważ znaki, które mogą być reprezentowane przez każdą stronę kodową, nie są dokładnie zgodne.
Aplikacje mogą również wywoływać funkcję GetACP. Ta funkcja pobiera identyfikator bieżącej strony kodowej systemu Windows (ANSI).
Tematy pokrewne