Udostępnij za pośrednictwem


Znaki zastępcze i dodatkowe

Aplikacje systemu Windows zwykle używają formatu UTF-16 do reprezentowania danych znaków Unicode. Użycie 16 bitów umożliwia bezpośrednią reprezentację 65 536 unikatowych znaków, ale ta podstawowa wielojęzyczna płaszczyzna (BMP) nie jest wystarczająca do pokrycia wszystkich symboli używanych w językach ludzkich. Unicode w wersji 4.1 zawiera ponad 97 000 znaków, z ponad 70 000 znaków tylko w języku chińskim.

Standard Unicode ustanowił 16 dodatkowych "płaszczyzn" znaków, każdy o takim samym rozmiarze jak BMP. Oczywiście większość punktów kodu poza BMP nie ma jeszcze przypisanych znaków, ale definicja płaszczyzn daje Unicode możliwość zdefiniowania 1114 112 znaków (czyli 216 * 17 znaków) w zakresie punktów kodu U+0000 do U+10FFFF. Aby kod UTF-16 reprezentował ten większy zestaw znaków, standard Unicode definiuje "znaki dodatkowe".

Informacje o znakach dodatkowych

Znak dodatkowy to znak znajdujący się poza BMP, a "zastępczy" jest wartością kodu UTF-16. W przypadku utF-16 do reprezentowania pojedynczego znaku dodatkowego jest wymagana "para zastępcza". Pierwszy (wysoki) surogat jest 16-bitową wartością kodu w zakresie U+D800 do U+DBFF. Drugi (niski) zastępca to 16-bitowa wartość kodu w zakresie U+DC00 do U+DFFF. Korzystając z mechanizmu zastępczego, utF-16 może obsługiwać wszystkie 114 114 112 potencjalnych znaków Unicode. Aby uzyskać więcej informacji na temat dodatkowych znaków, zastępców i par zastępczych, zobacz Standard Unicode.

Nuta

System Windows 2000 wprowadza obsługę podstawowych danych wejściowych, wyjściowych i prostego sortowania dodatkowych znaków. Jednak nie wszystkie składniki systemowe są zgodne ze znakami dodatkowymi.

 

System operacyjny obsługuje dodatkowe znaki w następujący sposób:

  • Format 12 tabeli cmap czcionki OpenType bezpośrednio obsługuje 4-bajtowy kod znaku. Aby uzyskać więcej informacji, zobacz specyfikacja czcionki OpenType.
  • System Windows obsługuje edytory metod wejściowych z obsługą zastępczej (IME).
  • Interfejs API interfejsu GDI systemu Windows obsługuje format 12 tabel cmap w czcionkach, dzięki czemu zastępcze mogą być wyświetlane poprawnie.
  • Interfejs API uniscribe obsługuje znaki dodatkowe.
  • kontrolki systemu Windows, w tym Edit i Rich Edit, obsługują znaki dodatkowe.
  • Aparat HTML obsługuje strony HTML zawierające dodatkowe znaki do wyświetlania, edytowania (za pośrednictwem programu Outlook Express) i przesyłania formularzy.
  • Tabela sortowania systemu operacyjnego obsługuje znaki dodatkowe.

Ogólne wytyczne dotyczące tworzenia oprogramowania przy użyciu znaków dodatkowych

UtF-16 obsługuje dodatkowe znaki jako pary zastępcze. System operacyjny przetwarza parę zastępczą podobnie jak w przypadku przetwarzania znaków innych niż. W czasie wyświetlania para zastępcza jest wyświetlana jako jedno glyph za pomocą uniscribe, zgodnie ze standardem Unicode.

System Windows Vista wprowadza trzy nowe makra, które ułatwiają identyfikowanie par zastępczych i zastępczych w ciągach UTF-16. Są to IS_HIGH_SURROGATE, IS_LOW_SURROGATEi IS_SURROGATE_PAIR.

Aplikacje automatycznie obsługują znaki dodatkowe, jeśli obsługują kod Unicode i używają kontrolek systemowych i standardowych funkcji interfejsu API, takich jak ExtTextOut i DrawText. W związku z tym, jeśli aplikacja używa standardowych kontrolek systemowych lub używa ogólnych ExtTextOutwywołania -type do wyświetlania, znaki dodatkowe powinny działać bez żadnego specjalnego kodowania.

Aplikacje, które implementują własną obsługę edycji, przepracowując pozycje glifów w dostosowany sposób, mogą używać atrybutu Uniscribe dla całego przetwarzania tekstu. Uniscribe ma oddzielne funkcje do obsługi złożonego przetwarzania skryptów, takich jak wyświetlanie tekstu, testowanie trafień i ruch kursora. Aby uzyskać te funkcje zaawansowane, aplikacja musi wywoływać funkcje Uniscribe. Należy pamiętać, że aplikacje korzystające z funkcji Uniscribe są w pełni wielojęzyczne, ale nakłada to karę za wydajność. W związku z tym niektóre aplikacje powinny wykonywać własne przetwarzanie znaków dodatkowych.

Ponieważ mechanizm zastępczy reprezentujący znaki dodatkowe jest dobrze zdefiniowany, aplikacja może zawierać kod do obsługi przetwarzania tekstu zastępczego UTF-16. Gdy aplikacja napotka oddzieloną wartość UTF-16 z niższego zarezerwowanego zakresu zastępczego (niski surogat) lub górnego zarezerwowanego zakresu zastępczego (wysoki zastępca), wartość musi być jedną połowę pary zastępczej. W związku z tym aplikacja może wykryć parę zastępczą, wykonując proste sprawdzanie zakresu. Jeśli napotka wartość UTF-16 w dolnym lub górnym zakresie, musi śledzić do tyłu lub do przodu jedną 16-bitową szerokość, aby uzyskać resztę znaku. Podczas pisania aplikacji należy pamiętać, że CharNext i CharPrev przenieść się o 16-bitowe punkty kodu, a nie przez pary zastępcze.

Nuta

Autonomiczne punkty kodu zastępczego mają wysoki surogat bez sąsiadującego niskiego zastępcy lub odwrotnie. Te punkty kodu są nieprawidłowe i nie są obsługiwane. Ich zachowanie jest niezdefiniowane.

 

Jeśli tworzysz czcionkę lub dostawcę IME, należy pamiętać, że systemy operacyjne przed systemem Windows XP domyślnie wyłączają obsługę dodatkowych znaków. System Windows XP i nowsze domyślnie włączają znaki dodatkowe. Jeśli podasz czcionkę i pakiet IME, który wymaga dodatkowych znaków, aplikacja musi ustawić następujące wartości rejestru:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\LanguagePack]
SURROGATE=(REG_DWORD)0x00000002

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\International\Scripts\42]
IEFixedFontName=[Surrogate Font Face Name]
IEPropFontName=[Surrogate Font Face Name]

zestawy znaków