Kodsidor
De flesta program som skrivs idag hanterar teckendata främst som Unicode-, med hjälp av UTF-16-kodningen. Många äldre program fortsätter dock att använda teckenuppsättningar baserat på kodsidor. Även nya program måste ibland fungera med kodsidor, ofta av någon av följande orsaker:
- För att kommunicera med äldre program.
- För att kommunicera med äldre e-post- och nyhetsservrar, som kanske inte alltid stöder Unicode.
- För att kommunicera med Windows-konsolen i äldre syften. (Konsolen stöder Unicode, men vissa äldre kommandoradsprogramverktyg kanske inte har det.)
Not
Nya Windows-program bör använda Unicode- för att undvika inkonsekvenser i olika kodsidor och för att underlätta lokaliseringen.
Varje kodsida representeras av en kodsideidentifierare, till exempel 1252, och hanteras av API-funktionerna unicode och teckenuppsättning. En lista över kodsideidentifierare som stöds finns i Kodsideidentifierare. Referensen "Kodsidor" på Microsoft Go Global Developer Center ger fullständiga beskrivningar av många kodsidor.
Windows-kodsidor, som ofta kallas "ANSI-kodsidor", är kodsidor för vilka icke-ASCII-värden (värden som är större än 127) representerar internationella tecken. Dessa kodsidor används internt i Windows Me och är även tillgängliga i Windows NT och senare.
Not
Ursprungligen baserades Windows-kodsidan 1252, den kodsida som ofta används för engelska och andra västeuropeiska språk, på ett utkast till American National Standards Institute (ANSI). Det utkastet blev så småningom ISO 8859-1, men Windows-kodsidan 1252 implementerades innan standarden blev slutgiltig och är inte exakt densamma som ISO 8859-1.
Många Windows API-funktioner har versionerna "A" (ANSI) och "W" (wide, Unicode). "A"-versionen hanterar text baserat på Windows-kodsidor, medan "W"-versionen hanterar Unicode-text. Se Windows-datatyper för strängar och konventioner för funktionsprototyper.
Windows-kodsidor kallas ibland även för "aktiva kodsidor" eller "systemaktiva kodsidor". Ett Windows-operativsystem har alltid en aktiv Windows-kodsida. Alla ANSI-versioner av API-funktioner använda den aktuella aktiva kodsidan.
Oem-kodsidor (originalutrustningstillverkare) är kodsidor för vilka icke-ASCII-värden representerar radritnings- och skiljetecken. Dessa kodsidor användes ursprungligen för MS-DOS och används fortfarande för konsolprogram. De används också för de icke-utökade filnamnen i filsystemen FAT12, FAT16 och FAT32 enligt beskrivningen i Teckenuppsättningar som används i filnamn. Den vanliga OEM-kodsidan för engelska är kodsida 437.
För både Windows-kodsidor och OEM-kodsidor motsvarar kodvärdena 0x00 via 0x7F 7-bitars ASCII-teckenuppsättningen. Kodvärden 0x00 via 0x19 och 0x7F alltid representera standardiserade kontrolltecken och 0x20 genom 0x7E representera standardiserade visningsbara tecken. Tecken som representeras av de återstående koderna, 0x80 via 0xff, varierar mellan teckenuppsättningar. Varje teckenuppsättning innehåller olika specialtecken, vanligtvis anpassade för ett språk eller en grupp med språk. Windows-kodsidan 1252 och OEM-kodsidan 437 används vanligtvis i USA.
Förutom Windows- och OEM-kodsidor kan dina program använda icke-inbyggda kodsidor. Exempel är EBCDIC- och Macintosh-kodsidor.
Två kodningar av Unicode (UTF-7 och UTF-8) implementeras som kodsidor. Precis som andra kodsidor är varje sida känd av en numerisk identifierare och kan hanteras med många av samma UNICODE- och teckenuppsättnings-API-funktioner.
Kodsidor kan antingen vara en bytes teckenuppsättning sidor (SBCS) eller dubbel byte teckenuppsättning (DBCS) sidor. På SBCS-sidor kodar varje byte direkt ett enskilt tecken, så att det går att representera exakt 256 distinkta tecken (inklusive kontrolltecken, bokstäver, siffror, skiljetecken, symboler och liknande). DBCS-kodsidor används för språk som japanska och kinesiska. På en sådan kodsida har vissa tecken två byte-kodningar med vissa bytevärden (alltid värden större än 127) som fungerar som "leadbyte". I stället för att koda tecken i egen rätt kan leadbyte mappas till ett tecken endast tillsammans med en "trail byte".
Vissa äldre protokoll kräver användning av SBCS- och DBCS-kodsidor. Varje SBCS/DBCS-kodsida stöder olika tecken, men ingen kodsida stöder den fullständiga bredden av tecken som tillhandahålls av Unicode. Varje SBCS/DBCS-kodsida stöder en annan delmängd, olika kodad.
Not
Data som konverteras från en SBCS- eller DBCS-kodsida till en annan kan skadas, eftersom samma datavärde på olika kodsidor kan koda ett annat tecken. Data som konverteras från Unicode till SBCS eller DBCS utsätts för dataförlust, eftersom en viss kodsida kanske inte kan representera alla tecken som används i just dessa Unicode-data.
Förutom SBCS- och DBCS-kodsidorna har dina program tillgängliga kodsidorna 52936, 54936, 51949 och 5022x, som använder en metod som liknar den för en DBCS. En kodsida för flerbytesteckenuppsättning går dock längre än två bytes kodningar av vissa tecken. UTF-7 och UTF-8 använder en liknande metod för att koda Unicode baserat på 7-bitars respektive 8-bitars byte. Mer information finns i Unicode.
Med flera unicode- och teckenuppsättningsfunktioner kan dina program hantera kodsidor. Ett program kan använda funktionerna GetCPInfo och GetCPInfoEx för att hämta information om en kodsida. Den här informationen innehåller standardtecknet som används när ett tecken i en konverterad sträng inte har någon motsvarande post på kodsidan.
Ett program kan använda funktionerna MultiByteToWideChar och WideCharToMultiByte för att konvertera mellan strängar baserade på Windows-kodsidor och Unicode-strängar. Även om deras namn refererar till "MultiByte" fungerar dessa funktioner lika bra med kodsidorna SBCS, DBCS och multibyte.
Not
WideCharToMultiByte kan förlora vissa data om den angivna kodsidan inte kan representera alla tecken i en Unicode-sträng.
Ditt program kan konvertera mellan Windows-kodsidor och OEM-kodsidor med hjälp av standardfunktionerna för C-körningsbiblioteket. Användning av dessa funktioner innebär dock en risk för dataförlust eftersom de tecken som kan representeras av varje kodsida inte matchar exakt.
Dina program kan också anropa funktionen GetACP. Den här funktionen hämtar identifieraren för den aktuella Windows-kodsidan (ANSI).
Relaterade ämnen