User Tools

Site Tools


tanszek:oktatas:infrendalapjai_architekturak:informacio_feldolgozas:karakter_kodolas

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
tanszek:oktatas:infrendalapjai_architekturak:informacio_feldolgozas:karakter_kodolas [2024/11/12 20:08] – created kneheztanszek:oktatas:infrendalapjai_architekturak:informacio_feldolgozas:karakter_kodolas [2024/11/12 20:17] (current) – [Base64 kódolás] knehez
Line 37: Line 37:
  
 //Megjegyzés//: Az UTF-16 kódolás előírja, hogy a byte-sorrendet jelezni kell egy úgynevezett byte-sorrend jelző (byte order mark, **BOM**) segítségével, amelynek meg kell előznie a tényleges szöveget. Notepad++-ban ez látszik is, egyes szöveges állományok elején. A BOM-ként használt karakter a „nulla szélességű nem törhető szóköz”, amely értelemszerűen sosem fordul elő eredeti jelentéstartalmával szöveg elején. Unicode száma hexadecimálisan **FEFF**; az **FE** **FF** byte-sorozat jelenti a „big-endian”, azaz „nagy végű”, és az **FF** **FE** sorozat jelenti a „little-endian”, azaz „kis végű” byte-sorrendet. //Megjegyzés//: Az UTF-16 kódolás előírja, hogy a byte-sorrendet jelezni kell egy úgynevezett byte-sorrend jelző (byte order mark, **BOM**) segítségével, amelynek meg kell előznie a tényleges szöveget. Notepad++-ban ez látszik is, egyes szöveges állományok elején. A BOM-ként használt karakter a „nulla szélességű nem törhető szóköz”, amely értelemszerűen sosem fordul elő eredeti jelentéstartalmával szöveg elején. Unicode száma hexadecimálisan **FEFF**; az **FE** **FF** byte-sorozat jelenti a „big-endian”, azaz „nagy végű”, és az **FF** **FE** sorozat jelenti a „little-endian”, azaz „kis végű” byte-sorrendet.
 +
 +==== Base64 kódolás ====
 +
 +Ez valójában nem karakter kódolás, de didaktikailag ide illik.
 +
 +Multipurpose Internet Mail Extensions (**MIME**) az internet hivatalos levélformátuma. A levelek az **SMTP** (Simple Mail Transfer Protocol) protokoll segítségével továbbítódnak a címzetthez. Az **SMTP** protokoll csak 7 bites **ASCII** karakterek továbbítását támogatja. A **MIME** szabvány többféle módszert támogat a bináris adatok továbbításához. Az egyik legismertebb a Base-64 kódolás.
 +
 +A következő példában egy melléklettel rendelkező email-t láthatunk, azaz a forrásadatot amit a levelező programok értelmeznek:
 +
 +<code>
 +Content-type: multipart/mixed; boundary="frontier"
 +MIME-version: 1.0
 +--frontier
 +Content-type: text/plain
 +This is the body of the message.
 +--frontier
 +Content-type: application/octet-stream
 +Content-transfer-encoding: base64
 +gajwO4+n2Fy4FV3V7zD9awd7uG8/TITP/vIocxXnnf/5mjgQjcipBUL1b3uyLwAVtBLOP4nV
 +AhSzlZnyLAF8na0n7g6OSeej7EjlF/aglS6ghfju FgRr+OX==
 +--frontier--
 +</code>
 +
 +Hátulról a második és harmadik sorban láthatóak base64 kódolt adatok. Nézzük hogyan jön ez létre.
 +
 +**Base64** kódolás (vagy általánosabban adat reprezentáció) egy 64 jelből álló készleten alapul. Olyan, mintha **64**-es számrendszerbe írnánk át az adatainkat. A kódolást 6 bites csoportokon végezzük.
 +
 +<code>
 +0..25     – 'A' .. 'Z'
 +26..51    – 'a' – 'z'
 +52..61    – '0' – '9'
 +62        – '+'
 +63        – '/'
 +</code>
 +
 +Azaz 0 és 25 között használjuk az angol ABC első 26 nagybetűjét, majd 26 és 51 között a kisbetűket, valamint 52-61-ig a számokat majd a maradék 2 kódhelyre a + és / jelek kerülnek. Így összesen 64 féle szimbólumot adtunk meg.
 +
 +=== Példa ===
 +
 +Kódoljuk a következő bináris adatot Base-64 kódolás szerint:
 +
 +''001100110011''
 +
 +Bontsuk fel két 6 bites részre:
 +
 +''001100'' , ''110011''
 +
 +Ezek decimálisan 12 és 51. A táblázat alapján: 12 = M és 51 = z
 +
 +Az eredmény:
 +
 +**Mz**
 +
 +----
 +
 +A Base-64 kódolás 3 byte-onként történik és 3 byte kódolt eredménye 4 karakter lesz. Hogyan kódolunk, ha a kódolandó bájtok száma nem osztható 3-al? (ilyen kor 1 vagy 2 db egyenlőséggel jelöljük ezeket az eseteket az alábbi példák alapján)
 +
 +Kódoljuk a ''00000001''-t (ami 1 byte):
 +
 +1. Egészítsük ki 3 byte-ra ''00000001'' ''00000000'' '00000000''
 +
 +2. Bontsuk fel 6 bites csoportokra:  ''000000 010000 000000 000000'' , és nézzük ki a táblázatból a karaktereket.
 +
 +3. Az eredmény ''AQ==''
 +
 +Most pedig kódoljuk a ''00000010'' ''00000001''-t (ami 2 byte adatot jelent):
 +
 +1. Egészítsük ki 3 byte-ra ''00000010'' ''00000001'' ''00000000''
 +
 +2. Bontsuk fel 6 bites csoportokra: ''000000 100000 000100 000000''
 +
 +3. Az eredmény ''AgE=''
 +
 +**Base-64 dekódolás**: 4 karakterenként visszafelé majd 8 bitenként csoportosítva. Az egyenlőség jelek száma alapján el lehet dönteni, hogy az utolsó 6 vagy 12 bitet figyelembe kell-e venni. 
 +
 +A kódolás fontos előnye, hogy sortörő karaktert is tartalmazhat. (minden olyan karaktert is, ami a kódtáblázatból hiányzik). De a dekódolásnál ezt figyelembe kell venni.
 +
 +
tanszek/oktatas/infrendalapjai_architekturak/informacio_feldolgozas/karakter_kodolas.1731442139.txt.gz · Last modified: 2024/11/12 20:08 by knehez