Kódlapok
A ma írt alkalmazások többsége elsősorban a unicode kezeli a karakteradatokat az UTF-16 kódolással. Számos régi alkalmazás azonban továbbra is kódlapok alapján használ karakterkészleteket. Még az új alkalmazásoknak is néha kódlapokkal kell dolgozniuk, gyakran az alábbi okok valamelyike miatt:
- Az örökölt alkalmazásokkal való kommunikációhoz.
- A régebbi levelezési és hírkiszolgálókkal való kommunikációhoz, amelyek nem mindig támogatják a Unicode-t.
- Kommunikáció a Windows Konzollal régi célokra. (A konzol támogatja a Unicode-t, de előfordulhat, hogy néhány régi parancssori alkalmazáseszköz nem.)
Jegyzet
Az új Windows-alkalmazásoknak Unicode kell használniuk a változatos kódlapok inkonzisztenciája és a honosítás megkönnyítése érdekében.
Minden kódlapot egy kódlapazonosító (például 1252) jelöl, és a Unicode és a karakterkészlet API-függvényei kezelik. A támogatott kódlap-azonosítók listáját a Kódlapazonosítókcímű témakörben találja. A Microsoft Go Global Developer Center "Code Pages" hivatkozása számos kódlap teljes leírását ismerteti.
A Windows-kódlapok, más néven "ANSI-kódlapok" olyan kódlapok, amelyeknél a nem ASCII-értékek (127-nél nagyobb értékek) nemzetközi karaktereket jelölnek. Ezeket a kódlapokat natív módon használják a Windows Me-ben, és a Windows NT-ben és újabb verziókban is elérhetők.
Jegyzet
Eredetileg a Windows 1252 kódlapja, az angol és más nyugat-európai nyelvekhez gyakran használt kódlap egy Amerikai Nemzeti Szabványügyi Intézet (ANSI) tervezetén alapult. Ez a piszkozat végül ISO 8859-1 lett, de a Windows 1252-es kódlapját a szabvány véglegesítése előtt implementálták, és nem teljesen ugyanaz, mint az ISO 8859-1.
Számos Windows API-függvény rendelkezik "A" (ANSI) és "W" (széles, Unicode) verzióval. Az "A" verzió a Windows kódlapjai alapján kezeli a szöveget, míg a "W" verzió a Unicode-szöveget. Lásd: Windows-adattípusok sztringekhez és függvény prototípusainak konvencióihoz.
A Windows-kódlapokat "aktív kódlapoknak" vagy "rendszeraktív kódlapoknak" is nevezik. A Windows operációs rendszer mindig rendelkezik egy jelenleg aktív Windows-kódlappal. Az API-függvények ÖSSZES ANSI-verziója az aktuálisan aktív kódlapot használni.
Az eredeti berendezésgyártói (OEM-) kódlapok olyan kódlapok, amelyeknél a nem ASCII értékek vonalrajzot és írásjeleket jelölnek. Ezeket a kódlapokat eredetileg MS-DOS használták, és továbbra is a konzolalkalmazásokhoz használják. A FAT12, FAT16 és FAT32 fájlrendszerek nem kiterjesztett fájlneveihez is használhatók, a fájlnevekben használt karakterkészletekben. A szokásos OEM-kódlap az angol nyelvhez a 437- os kódlap.
A Windows-kódlapok és az OEM-kódlapok esetében a 0x7F keresztül 0x00 kódértékek a 7 bites ASCII-karakterkészletnek felelnek meg. A kódértékek 0x19 keresztül 0x00 és 0x7F mindig szabványosított vezérlőkarakterek, 0x20 0x7E szabványos megjeleníthető karaktereket jelölnek. A többi kód által képviselt karakterek 0xff 0x80 karakterkészletek között változnak. Minden karakterkészlet különböző speciális karaktereket tartalmaz, amelyek általában egy nyelvhez vagy nyelvcsoporthoz lesznek testre szabva. A Windows 1252-s kódlapját és a 437-ben használt OEM-kódlapot általában az Egyesült Államokban használják.
A Windows- és OEM-kódlapok mellett az alkalmazások nem natív kódlapokat is használhatnak. Ilyenek például az EBCDIC és a Macintosh kódlapok.
A Unicode két kódolása (UTF-7 és UTF-8) kódlapként van implementálva. A többi kódlaphoz hasonlóan az egyes oldalakat numerikus azonosítók is ismerik, és számos azonos Unicode- és karakterkészletű API-függvénysel kezelhetők.
A kódlapok lehetnek egybájtos karakterkészletű (SBCS) lapok, vagy kétbájtos karakterkészlet (DBCS) lapok. Az SBCS-oldalakon minden bájt közvetlenül egy karaktert kódol, így pontosan 256 különböző karaktert jelölhet (beleértve a vezérlőkarakterek, betűk, számjegyek, írásjelek, szimbólumok és hasonlók). A DBCS-kódlapok olyan nyelvekhez használatosak, mint a japán és a kínai. Egy ilyen kódlapon egyes karakterek kétbájtos kódolással rendelkeznek bizonyos bájtértékekkel (mindig 127-nél nagyobb értékekkel), amelyek "érdeklődő bájtként" szolgálnak. A karakterek kódolása helyett az érdeklődő bájtok csak egy karakterre képezhetők le egy "nyomvonal bájttal" együtt.
Egyes örökölt protokollok SBCS- és DBCS-kódlapok használatát igénylik. Minden SBCS/DBCS kódlap különböző karaktereket támogat, de egyetlen kódlap sem támogatja a Unicode által biztosított karakterek teljes szélességét. Minden SBCS/DBCS-kódlap más-más kódolású részhalmazt támogat.
Jegyzet
Az egyik SBCS- vagy DBCS-kódlapról egy másikra konvertált adatok sérülésnek lehetnek kitéve, mert a különböző kódlapokon lévő adatértékek más karaktert kódolhatnak. A Unicode-ból SBCS-re vagy DBCS-re konvertált adatok adatvesztésnek lehetnek kitéve, mivel előfordulhat, hogy egy adott kódlap nem tudja az adott Unicode-adatokban használt összes karaktert ábrázolni.
Az SBCS- és DBCS-kódlapok mellett az alkalmazások az 52936, 54936, 51949 és 5022x kódszámú többbájtos karakterkészletet is használhatják, amelyek a DBCS-hez hasonló megközelítést használnak. A többbájtos karakterkészlet kódlapja azonban túllép bizonyos karakterek kétbájtos kódolásán. Az UTF-7 és az UTF-8 hasonló megközelítést használ a Unicode kódolásához 7 bites és 8 bites bájtok alapján. További információ: Unicode.
Számos Unicode- és karakterkészlet-függvény teszi lehetővé az alkalmazások számára a kódlapok kezelését. Az alkalmazások a GetCPInfo és GetCPInfoEx függvényekkel szerezhetnek be információkat egy kódlapról. Ezek az információk tartalmazzák az alapértelmezett karaktert, amelyet akkor használnak, ha egy konvertált sztring egyik karaktere nem tartalmaz megfelelő bejegyzést a kódlapon.
Az alkalmazások a MultiByteToWideChar és WideCharToMultiByte függvényeket használhatják a Windows-kódlapok és Unicode-sztringek alapján történő sztringek közötti konvertáláshoz. Bár a nevük a "MultiByte" kifejezésre utal, ezek a függvények egyformán jól működnek az SBCS, a DBCS és a többbájtos karakterkészlet kódlapjaival.
Jegyzet
WideCharToMultiByte adatvesztést okozhat, ha a megadott kódlap nem tudja megjeleníteni a Unicode-sztring összes karakterét.
Az alkalmazás a szabványos C futtatókörnyezeti kódtárfüggvények használatával konvertálhat Windows-kódlapok és OEM-kódlapok között. Ezeknek a függvényeknek a használata azonban adatvesztéssel jár, mivel az egyes kódlapok által ábrázolható karakterek nem egyeznek pontosan.
Az alkalmazások meghívhatják a GetACP függvényt is. Ez a függvény lekéri az aktuális Windows -kódlap (ANSI) azonosítóját.
Kapcsolódó témakörök