Dela via


Unicode

Unicode är en global teckenkodningsstandard. Systemet använder Unicode uteslutande för tecken- och strängmanipulering. En detaljerad beskrivning av alla aspekter av Unicode finns i Unicode Standard.

Jämfört med äldre mekanismer för hantering av tecken- och strängdata förenklar Unicode lokalisering av programvara och förbättrar flerspråkig textbearbetning. Genom att använda Unicode för att representera tecken- och strängdata i dina program kan du aktivera funktioner för universellt datautbyte för global marknadsföring med hjälp av en enda binär fil för varje möjlig teckenkod. Unicode gör följande:

  • Gör att alla kombinationer av tecken, som hämtas från valfri kombination av skript och språk, kan samexistera i ett enda dokument.
  • Definierar semantik för varje tecken.
  • Standardiserar skriptbeteende.
  • Tillhandahåller en standardalgoritm för dubbelriktad text.
  • Definierar korsmappningar till andra standarder.
  • Definierar flera kodningar av dess enteckenuppsättning: UTF-7, UTF-8, UTF-16 och UTF-32. Konverteringen av data mellan dessa kodningar är förlustfri.

Unicode stöder många skript som används av språk runt om i världen, och även ett stort antal tekniska symboler och specialtecken som används vid publicering. Skripten som stöds är bland annat latinska, grekiska, kyrilliska, hebreiska, arabiska, devanagari, thailändska, han, hangul, hiragana och katakana. Språk som stöds omfattar, men är inte begränsade till, tyska, franska, engelska, grekiska, ryska, hebreiska, arabiska, hindi, thailändska, kinesiska, koreanska och japanska. Unicode kan för närvarande representera de allra flesta tecken i modern datoranvändning runt om i världen och fortsätter att uppdateras för att göra det ännu mer komplett.

Unicode-aktiverade funktioner beskrivs i Konventioner för funktionsprototyper. Dessa funktioner använder UTF-16-kodning (breda tecken), vilket är den vanligaste kodningen av Unicode och den som används för inbyggd Unicode-kodning på Windows-operativsystem. Varje kodvärde är 16 bitar brett, till skillnad från den äldre kodsidan metod för tecken- och strängdata, som använder 8-bitars kodvärden. Med 16 bitar kan du koda direkt på 65 536 tecken. Faktum är att universum av symboler som används för att transkribera mänskliga språk är ännu större än så, och UTF-16-kodpunkter i intervallet U + D800 genom U + DFFF används för att bilda surrogatpar, som utgör 32-bitars kodningar av kompletterande tecken. Mer information finns i surrogater och tilläggstecken.

Unicode-teckenuppsättningen innehåller flera kombinationstecken, till exempel U+0308 (" ̈"), en kombination av dieresis eller umlaut. Unicode kan ofta representera samma glyph i antingen ett ''composed'' eller ett ''decomposed''-formulär: till exempel är den sammansatta formen av "Ä" den enda Unicode-kodpunkten "Ä" (U+00C4), medan dess förmultnad form är "A" + " ̈" (U+0041 U+0308). Unicode definierar inte ett sammansatt formulär för varje glyf. Till exempel representeras den vietnamesiska gemenen "o" med cirkumflex och tilde ("ỗ") av U+006f U+0302 U+0303 (o + Cirkumflex + Tilde). Mer information om hur du kombinerar tecken och relaterade problem finns i Använda Unicode-normalisering för att representera strängar.

För kompatibilitet med 8-bitars- och 7-bitarsmiljöer kan Unicode också kodas som UTF-8 respektive UTF-7. Även om Unicode-aktiverade funktioner i Windows använder UTF-16, är det också möjligt att arbeta med data som kodas i UTF-8 eller UTF-7, som stöds i Windows som flerbytesteckenuppsättning kodsidor.

Nya Windows-program bör använda UTF-16 som intern datarepresentation. Windows har också omfattande stöd för kodsidor, och blandad användning i samma program är möjlig. Även nya Unicode-baserade program måste ibland arbeta med kodsidor. Orsaker till detta beskrivs i kodsidor.

Ett program kan använda funktionerna MultiByteToWideChar och WideCharToMultiByte för att konvertera mellan strängar baserat på kodsidor och Unicode-strängar. Även om deras namn refererar till "MultiByte" fungerar dessa funktioner lika bra med teckenuppsättning med en byte (SBCS), teckenuppsättning med dubbla byte (DBCS) och MBCS-kodsidor (MultiByte Character Set).

Vanligtvis bör ett Windows-program använda UTF-16 internt och konvertera endast som en del av ett "tunt lager" över gränssnittet som måste använda ett annat format. Den här tekniken skyddar mot förlust och skada av data. Varje kodsida stöder olika tecken, men ingen av dem stöder hela spektrumet av tecken som tillhandahålls av Unicode. De flesta kodsidorna stöder olika underuppsättningar, olika kodade. Kodsidorna för UTF-8 och UTF-7 är ett undantag eftersom de stöder den fullständiga Unicode-teckenuppsättningen och konverteringen mellan dessa kodningar och UTF-16 är förlustfri.

Data som konverteras direkt från kodningen som används av en kodsida till kodningen som används av en annan skadas, eftersom samma datavärde på olika kodsidor kan koda ett annat tecken. Även när ditt program konverterar så nära gränssnittet som möjligt bör du tänka noga på dataområdet som ska hanteras.

Data som konverteras från Unicode till en kodsida kan förloras eftersom en viss kodsida kanske inte kan representera alla tecken som används i just dessa Unicode-data. Observera därför att WideCharToMultiByte kan förlora vissa data om målkodsidan inte kan representera alla tecken i Unicode-strängen.

När du moderniserar kodsidebaserade äldre program för att använda Unicode kan du använda allmänna funktioner och TEXT makro för att underhålla en enda uppsättning källor som du kan kompilera två versioner av programmet från. En version stöder Unicode och den andra fungerar med Windows-kodsidor. Med den här mekanismen kan du konvertera även mycket stora program från Windows-kodsidor till Unicode samtidigt som du behåller programkällor som kan kompileras, skapas och testas i alla faser av konverteringen. Mer information finns i Konventioner för funktionsprototyper.

Unicode-tecken och strängar använder datatyper som skiljer sig från dem för kodsidesbaserade tecken och strängar. Tillsammans med en serie makron och namngivningskonventioner minimerar den här skillnaden risken för att oavsiktligt blanda de två typerna av teckendata. Det underlättar kontroll av kompilatortyp för att säkerställa att endast Unicode-parametervärden används med funktioner som förväntar sig Unicode-strängar.

teckenuppsättningar

sortering

surrogater och tilläggstecken

Använda Unicode-normalisering för att representera strängar