Dela via


Surrogater och tilläggstecken

Windows-program använder normalt UTF-16 för att representera Unicode- teckendata. Användningen av 16 bitar möjliggör direkt representation av 65 536 unika tecken, men detta grundläggande flerspråkiga plan (BMP) är inte tillräckligt för att täcka alla symboler som används på mänskliga språk. Unicode version 4.1 innehåller över 97 000 tecken, med över 70 000 tecken enbart för kinesiska.

Unicode-standarden har upprättat ytterligare 16 "plan" med tecken, var och en samma storlek som BMP. Naturligtvis har de flesta kodpunkter utöver BMP ännu inte tecken tilldelade, men definitionen av planen ger Unicode potential att definiera 1 114 112 tecken (det vill säga 216 * 17 tecken) inom kodpunktsintervallet U+0000 till U+10FFFF. För att UTF-16 ska representera den här större uppsättningen tecken definierar Unicode Standard "kompletterande tecken".

Om tilläggstecken

Ett tilläggstecken är ett tecken som ligger utanför BMP och en "surrogat" är ett UTF-16-kodvärde. För UTF-16 krävs ett "surrogatpar" för att representera ett enda tilläggstecken. Den första (höga) surrogaten är ett 16-bitars kodvärde i intervallet U+D800 till U+DBFF. Den andra surrogaten (låg) är ett 16-bitars kodvärde i intervallet U+DC00 till U+DFFF. Med hjälp av surrogatmekanismen kan UTF-16 stödja alla 1 114 112 potentiella Unicode-tecken. Mer information om tilläggstecken, surrogater och surrogatpar finns i Unicode Standard.

Not

Windows 2000 introducerar stöd för grundläggande indata, utdata och enkel sortering av tilläggstecken. Alla systemkomponenter är dock inte kompatibla med tilläggstecken.

 

Operativsystemet stöder tilläggstecken på följande sätt:

  • Format 12 i tabellen opentype-teckensnittskartor har direkt stöd för 4-bytesteckenkoden. Mer information finns i OpenType-teckensnittsspecifikationen.
  • Windows stöder surrogataktiverade indatametodredigerare (IME).
  • API:et Windows GDI stöder format 12 cmap-tabeller i teckensnitt så att surrogater kan visas korrekt.
  • API:et Uniscribe stöder ytterligare tecken.
  • Windows-kontroller, inklusive Redigera och Rich Edit, stöder ytterligare tecken.
  • HTML-motorn stöder HTML-sidor som innehåller tilläggstecken för visning, redigering (via Outlook Express) och formuläröverföring.
  • Sorteringstabellen för operativsystemet stöder ytterligare tecken.

Allmänna riktlinjer för programvaruutveckling med hjälp av tilläggstecken

UTF-16 hanterar kompletterande tecken som surrogatpar. Operativsystemet bearbetar ett surrogatpar på samma sätt som det bearbetar icke-avståndsmarkeringar. Vid visningstillfället visas surrogatparet som en glyph med hjälp av Uniscribe, enligt Unicode Standard.

Windows Vista introducerar tre nya makron för att identifiera surrogatpar och surrogatpar i UTF-16-strängar. Dessa är IS_HIGH_SURROGATE, IS_LOW_SURROGATEoch IS_SURROGATE_PAIR.

Program stöder automatiskt tilläggstecken om de stöder Unicode och använder systemkontroller och api-standardfunktioner, till exempel ExtTextOut och DrawText. Om ditt program använder standardsystemkontroller eller använder allmänna ExtTextOut--type-anrop för att visa, bör tilläggstecken därför fungera utan någon särskild kodning.

Program som implementerar sitt eget redigeringsstöd genom att arbeta ut glyph-positioner på ett anpassat sätt kan använda Uniscribe för all textbearbetning. Uniscribe har separata funktioner för att hantera komplex skriptbearbetning, till exempel textvisning, träfftestning och markörrörelse. Ett program måste anropa Uniscribe-funktionerna specifikt för att hämta dessa avancerade funktioner. Observera att program som använder Uniscribe-funktionerna är helt flerspråkiga, men detta medför ett prestandastraff. Därför bör vissa program utföra sin egen bearbetning av tilläggstecken.

Eftersom surrogatmekanismen för att representera kompletterande tecken är väldefinierad kan ditt program innehålla kod för att hantera UTF-16-surrogattextbearbetning. När programmet stöter på ett avskilt UTF-16-värde från antingen det lägre reserverade surrogatintervallet (en låg surrogat) eller det övre reserverade surrogatintervallet (en hög surrogat) måste värdet vara hälften av ett surrogatpar. Därför kan programmet identifiera ett surrogatpar genom att utföra enkel intervallkontroll. Om det stöter på ett UTF-16-värde i det nedre eller övre intervallet, måste det spåra bakåt eller framåt en 16-bitars bredd för att få resten av tecknet. När du skriver ditt program bör du tänka på att CharNext och CharPrev flytta med 16-bitars kodpunkter, inte av surrogatpar.

Not

Fristående surrogatkodpunkter har antingen en hög surrogat utan en angränsande låg surrogat eller vice versa. Dessa kodpunkter är ogiltiga och stöds inte. Deras beteende är odefinierat.

 

Om du utvecklar ett teckensnitt eller en IME-provider bör du tänka på att operativsystem före Windows XP inaktiverar ytterligare teckenstöd som standard. Windows XP och senare aktiverar ytterligare tecken som standard. Om du anger ett teckensnitt och ett IME-paket som kräver ytterligare tecken måste programmet ange följande registervärden:

[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]

teckenuppsättningar