„Karakterkódolás” változatai közötti eltérés

[ellenőrzött változat][ellenőrzött változat]
Tartalom törölve Tartalom hozzáadva
SieBot (vitalap | szerkesztései)
a Bot: következő hozzáadása: nl:Tekencodering
DeniBot (vitalap | szerkesztései)
a kisebb formai javítások
1. sor:
{{lektor|2006 októberéből}}
Egy '''karakter kódtábla''' vagy '''karakterkészlet''' (néha használják a [[code page]] kifejezést) egy párokból álló sorozat. A sorozat elemei, a párok egyik eleme a [[kód]] a másik pedig egy adott [[halmaz]] egy [[karakter]]e. A pár kód része általában egy [[egész számok|egész]] szám, vagy azok sorozata, [[byte]] vagy azok sorozata, vagy elektromos impuzus, vagy bármi egyéb, amit a [[számítógép]] [[tároló]]jában szövegként tárolni lehet, illetve adatátviteli hálózaton, mint szöveg, továbbítható. Egy mindenki által ismert példa erre a [[Morzekód]]: ami betűkhöz [[latin ábécé]] a távíró billentyű rövid vagy hosszú lenyomását rendeli; illetve az [[ASCII]], amely betűk, számok és más szimbólumokhoz rendel [[egész számok|integer]], amelyet egy 7-[[bit]]es bináris számként értelmez. Általában ezt a 7-bites számot kiegészítik egy külön 0 bittel, így 8-bites [[byte]] formában tárolják, és kezelik.
 
A számítógépek elterjedésének kezdetén már kialakult a '''karakterkészlet''' fogalma, amelyet kezdetben az [[ASCII]] (1963) és az [[EBCDIC]] (1964) testesített meg, és egyben el is indultak szabványosítási törekvések is. Felmerült a karakterkészletek számának, valamint az ad-hoc kódolási módszerek fejlesztésének és elterjesztésének korlátozásának szükségessége. Később felmerül az igény több [[írás rendszer]] kezelésére, ideértve a kelet-Ázsiai írások [[CJK]] családját, egyre nőtt a kezelendő karakterek száma, és megnőtt az igény a nagy számú karakter szisztematikus, nem ad-hoc kezelésére.
 
== Egyszerű kódkészlet ==
Konvencionálisan a karakterkészlet és a karakterkódolás kifejezéseket azonos értelemben használják, mert néhány szabvány meghatározza a karaktereket és azt, hogy hogyan lehet ezeket a karaktereket kódolni, pontosabban "visszakódolni" egy kódsorozatból (ami általában egy karakter kódegységenként). Történeti okokból, a [[MIME]] és azok a rendszerek, amelyek az u.n. '''charset''' kifejezést használják, a karakterek sorozatát byte-ok sorozatára alakítják át.
 
== A modern kódolási modell ==
 
A [[Unicode]] és a vele párhuzamos szabvány, az ISO 10646 [[univerzális karakterkészlet]] – Universal Character Set (UCS), amelyek a legmodernebb karakterkódolást testesítik meg, szakítanak az egy karakter egy byte elvvel. Eltérően a egy-az-egy elvtől, a kezelt karaktereket "kódegységek" (korlátozott hosszúságú számok) sorozatának tekinti, majd végül ezt a szám sorozatot [[byte]]ok (8 bites egységek) sorozataként tárolja, illetve ábrázolja. Ez a dekompozíciós elv biztosítja, hogy felépíthető egy univerzális karakterkészlet, amely több módon is kódolható, illetve a kódból visszaállítható. A modell pontos és helyes leírásához azonban szükség van arra, hogy a "karakterkészlet" illetve "karakterkódolás" kifejezéseket az eddig használtaknál pontosabban határozzák meg. A modern modellben használt kifejezések a következők:
15. sor:
A '''kódolt karakterhalmaz''', (coded character set) határozza meg azt, ahogyan megjeleníti a karakterkészlet egy adott elemét, egy nem negatív, egész számként, amit '''kód''' vagy '''kód pont''' néven is neveznek. Például, egy adott karakterkészlet esetében egy karakterhez, ami a Latin ábécé nagy "A" betűjét jelenti, a 65 egész értéket rendelhetjük, a a "B" karakterhez a 66-ot, és így tovább. Az összes kezelni kívánt karakter a hozzájuk tartozó egész számokkal együtt alkotja a kódolt karakaterek halmazát. A többszörösen kódolt karakterek halmaza, lehet megosztott, mint például az [[ISO-8859-1]] és az IBM code pages [[code page 037|037]] és [[code page 500|500]]. A karakterek azonosak, azonban más kódok tartoz(hat)nak hozzájuk. Egy kódolt karakterhalmazban egy kódérték, vagy kódpont csak egy karaktert jelölhet ki.
 
A '''karakterkódolási forma''' (character encoding form – CEF) írja le azt a konverziót, ami meghatározza, hogyan lesznek a kódolt karakterek halmazában lévő egész értékekből (a kódpontok) a korlátozott hosszúságú egészek, a '''kódértékek''', amiket a rendszer tárolni tud, azaz fix hosszúságú, bináris számként megjeleníteni. Például, egy rendszer, ami a numerikus információkat 16-bites egységekben tárolja, a 0 és a 65 535 közé eső egész számokat képes egy egységben tárolni. A nagyobb egészeket viszon csak úgy tudja ábrázolni, ha több, mint egy 16-bites egységet használ. Ez az, amit a CEF meghatároz: meghatároz egy leképezési eljárást, amely a lehetséges egyedi kód'''pont'''ok tartományát, amely legyen mondjuk 0 és 1,4 millió közötti, átviszi ''egy vagy több'', mondjuk a 0 és a 65 535 közé eső tartományba eső értékek sorozatává, ami a kód''érték''.
 
Az egyszerűbb karakterkódolási formát (CEF) használó kódok egyszerűen elegendően nagy egységet választanak a kódértékek tárolására, tehát a kódolt karakterek halmazát egy-az-egy megfeleltetésbe hozzák az adott egységen tárolható értékek halmazával. Az eljárás jól működik addig, amig a kódolt karakterek halmaza megfeleltethető 8-biten tárolható értékek halmazának (ami igaz a régebbi nem CJK kódokra), illetve megfeleltetehető 16-biten tárolható értékek halmazának (a Unicode korábbi változata). Azonban a kódolt karakterek halmazának mérete egyre növekszik (a modern Unicode legalább 21 bitet igényel karakterenként), az egyszerű módszer egyre kevésbé hatékony, és egyre nehezebb a létező rendszerekben megvalósítani a nagyobb/hosszabb kód értékek használatát. Ezért a legtöbb rendszer a Unicode régebbi változatait használja, vagy az [[UTF-8]]-at, ahol a Unicode kód pontjait változó hosszúságú, 8-bites értékek sorozatára, vagy az [[UTF-16]]-ot, ahol a Unicode kód pontjait változó hosszúságú, 16-bites értékek sorozatára konvertálja.
 
Végül, egy '''karakterkódolási séma''', (character encoding scheme – CES) határozza meg, hogy hogyan lehet a fix hosszúságú, egész számot, a kód értékét, ami egy 8 bites egységekből álló sorozatként tárolni, akár a memóriában, akár egy fájlrendszerben vagy így továbbítani adatátviteli vonalon. A Unicode a legtöbb esetben egy egyszerű karakterkódolási sémát használ: egyszerűen meghatározza, hogy egy egész byte-jainak big-[[endian]] vagy little-endian elrendezésűnek kell lennie (az UTF-8 estén még ez sem szükséges). Bár léteznek összetett karakter dekódolási sémák is, amelyek eszkép szekvenciákat használnak a számos egyszerű séma közötti átkapcsolásra (mint az [[ISO 2022]]), és léteznek tömörítő sémák, amlyek megpróbálják minimalizálni a kódegységekre jutó byte-ok számát (úgy mint [[Standard Compression Scheme for Unicode|SCSU]], [[BOCU]], és [[Punycode]]).
 
== A karakterkódolás története ==
* [[I Ching]] (China 1122 BCE – 256 BCE)
* [[Geomantic figures]]
* [[Braille]]
 
== Elterjedt karakterkódolások ==
* [[ISO/IEC 646|ISO 646]]
** [[ASCII]]
57. sor:
* [[Unicode]] (és részhalmaza, a 16 bites 'Alap Többnyelvű Lap' (Basic Multilingual Plane). Lásd [[UTF-8]]
 
== Karakterkonverziós eszközök ==
Platformok között:
* [[iconv]] – fájlok tartalmát konvertálja egy adott kódról egy másik kódra
 
[[Linux]]:
* utrac – fájltartalmat konvertál egy kódról egy másik kódra [http://utrac.sourceforge.net/]
* convmv – a fájnevet konvertálja egy adott kódról egy másik kódra [http://j3e.de/linux/convmv/man/]
 
== Lásd még ==
* [[:Kategória:Karakterkódolás]] – szócikkek az általános karakterkódolásról
* [[:Kategória:Karakterkészletek]] – szócikkek a karakterkészletekről
* ''[[Mojibake]]'' – tipikus kódolási hiba
* [[Speciális karakterek]]
 
== Egyéb, angol nyelvű linkek ==
* [http://www.iana.org/assignments/character-sets Character sets registered by Internet Assigned Numbers Authority]
* [http://www.unicode.org/unicode/reports/tr17/ Unicode Technical Report #17: Character Encoding Model]
81. sor:
* [http://www.cs.mcgill.ca/~aelias4/encodings.html A complete introduction to Japanese character encodings]
* [http://www.cs.tut.fi/~jkorpela/chars.html A tutorial on character code issues]
* [http://www.paulschou.com/tools/xlate/ Online Char (ASCII), HEX, Binary, Base64, etc... Encoder/Decoder with MD2, MD4, MD5, SHA1+2, etc. hashing algorithms]
* [http://www.2cyr.com/decode/ Universal Cyrillic decoder], an online program that may help recovering unreadable [[Cyrillic alphabet|Cyrillic texts]] with wrong character encodings (some others also).