Što je kodiranje znakova
Kodiranje je dogovor: „broj 65 znači slovo A“. Kad pišete tekst, program sprema te brojeve; kad ga netko drugi otvori, njegov ih program ponovno prevodi u slova služeći se istim dogovorom. Ako dvoje ne koriste istu tablicu, tekst ispadne pogrešno.
Treba razlikovati dvije ideje. Jedna je skup znakova, popis koji brojevi odgovaraju kojim simbolima. Druga je način na koji se ti brojevi spremaju u bajtove. U ASCII-ju se to dvoje trivijalno podudara; u Unicodeu ne, i tu na scenu stupa UTF-8.
ASCII: 128 znakova od 7 bitova
ASCII (kratica za American Standard Code for Information Interchange) standardiziran je 1960-ih. Koristi 7 bitova, dakle 2 na 7. = 128 kodova, od 0 do 127. Od toga je 33 kontrolnih znakova (od 0 do 31 i 127), a 95 se može ispisati (od 32 do 126, uključujući razmak).
Ne sadrži slova s dijakriticima, ni š, ni č, ni simbol eura: osmišljen je za engleski. To objašnjava zašto su poslije bile potrebne druge tablice.
| Kontrolni znak | Decimalni | Heksadecimalni | Binarni (7 bitova) | Čemu služi |
|---|---|---|---|---|
| Nul (NUL) | 0 | 00 | 0000000 | Označava kraj niza u mnogim jezicima |
| Vodoravni tabulator (TAB) | 9 | 09 | 0001001 | Skače na sljedeći tabulator |
| Novi redak (LF) | 10 | 0A | 0001010 | Spušta se u sljedeći redak |
| Povratak na početak retka (CR) | 13 | 0D | 0001101 | Vraća se na početak retka |
| Escape (ESC) | 27 | 1B | 0011011 | Pokreće kontrolne nizove |
| Razmak | 32 | 20 | 0100000 | Prvi znak koji se može ispisati |
| Brisanje (DEL) | 127 | 7F | 1111111 | Briše znak |
Odnosi koje vrijedi zapamtiti
Tablica nije poredana nasumično. S nekoliko pravilnosti kodove možete čitati napamet.
- Znamenke od „0“ do „9“ zauzimaju od 48 do 57 (30 do 39 u heksadecimalnom). Vrijednost znamenke je njezin kod minus 48: „7“ je 55, a 55 − 48 = 7.
- Velika slova idu od 65 („A“) do 90 („Z“), a mala od 97 („a“) do 122 („z“).
- Razlika između velikog slova i njegova malog uvijek je 32: „A“ = 65 i „a“ = 97; „C“ = 67 i „c“ = 99. U binarnom se mijenja samo jedan bit: 01000001 za „A“ i 01100001 za „a“.
- Da biste saznali koje je mjesto velikog slova u abecedi, oduzmite 64: „C“ je 67, a 67 − 64 = 3, treće slovo.
- Budući da sva velika slova (65 do 90) imaju manje kodove od malih (97 do 122), abecedni redoslijed „po kodu“ stavlja „Zebra“ ispred „apple“. Mnogim programima treba posebna opcija usporedbe da bi ispravno sortirali.
Kraj retka: LF, CR i CRLF
Prijelaz u novi redak djeluje jednostavno, ali se različito piše ovisno o sustavu. Unix, Linux i macOS koriste jedan znak, LF (10). Windows koristi dva uzastopna, CR i LF (13 i 10), poznata kao CRLF. Stari teleprinteri trebali su dvije različite naredbe: vratiti glavu na početak retka i pomaknuti papir za jedan redak.
Ta je razlika uzrok datoteka koje se u jednostavnom uređivaču vide kao jedan jedini redak ili s čudnim simbolom na kraju svakog retka. Ako tražite koji kod ima svaki od njih, upišite LF ili CR u pretraživač ASCII tablice.
„Prošireni ASCII“ nije standard
Budući da bajt ima 8 bitova, a ASCII koristi samo 7, ostalo je 128 slobodnih kodova (od 128 do 255) i svaki ih je proizvođač i regija popunio na svoj način. To se zove „prošireni ASCII“, ali ne postoji jedna tablica: postoji ih mnogo, a zovu se kodne stranice. Dvije od najpoznatijih su Latin-1 (ISO-8859-1), gdje je é kod 233, i Windows-1252, slična, ali s razlikama u kodovima od 128 do 159 (ondje je, primjerice, euro).
Problem je u tome što kod 233 u jednoj tablici znači „é“, a u drugoj nešto drugo. Tekst napisan jednom tablicom, a pročitan drugom, prikazivao je smeće. Unicode je nastao da prekine taj nered.
Unicode i UTF-8
Unicode dodjeljuje jedinstven broj, nazvan kodna točka, svakom znaku gotovo svih svjetskih pisama, plus simbolima i emotikonima. Danas ima više od 150.000 znakova. Piše se s prefiksom U+ i heksadecimalno: „A“ je U+0041, „š“ je U+0161, euro je U+20AC, a emotikon nasmiješenog lica je U+1F600. Prvih 128 kodnih točaka točno su one iz ASCII-ja.
UTF-8 je najčešći način spremanja tih brojeva u bajtove i koristi od 1 do 4 ovisno o znaku. Onih 128 iz ASCII-ja zauzimaju jedan bajt, identičan onom od uvijek, pa je ASCII tekst ujedno i valjan UTF-8 tekst. Ostalo zauzima više bajtova.
| Znak | Kodna točka | Bajtova u UTF-8 | Bajtovi (heksadecimalno) |
|---|---|---|---|
| A | U+0041 | 1 | 41 |
| é | U+00E9 | 2 | C3 A9 |
| š | U+0161 | 2 | C5 A1 |
| € | U+20AC | 3 | E2 82 AC |
| 😀 | U+1F600 | 4 | F0 9F 98 80 |
Zašto se pojavljuje „Å¡“ umjesto „š“
To je najčešća pogreška i ima točno objašnjenje. Slovo š u UTF-8 su dva bajta: C5 i A1. Ako program misli da je tekst u Latin-1, čita svaki bajt kao jedan znak: C5 je „Å“, a A1 je „¡“. Rezultat: „Å¡“. Isto se događa sa „ž“, koje se vidi kao „ž“, i s riječju „šuma“, koja se pojavljuje kao „Å¡uma“.
Rješenje je gotovo uvijek reći programu da datoteku otvori kao UTF-8 (u uređivaču teksta ili u postavkama uvoza proračunske tablice). Kad se dogodi obrnuto, tekst u Latin-1 pročitan kao UTF-8, obično se pojavljuju rombovi s upitnikom, jer ti pojedinačni bajtovi ne čine valjane UTF-8 nizove.
Kako koristiti ASCII tablicu i pretvarač
Alat „ASCII tablica“ prikazuje 128 znakova s njihovim kodom u decimalnom, heksadecimalnom, oktalnom i binarnom zapisu te naziv kontrolnih.
- U pretraživač upišite znak, kod ili naziv kontrolnog znaka (na primjer A, 65, 41 ili LF) da biste pronašli njegov redak.
- Koristite gumbe filtra (Kontrolni, Znamenke, Velika slova, Mala slova, Znakovi) da vidite samo jednu skupinu.
- Za pretvorbu upišite tekst u „Tekst“ i odaberite format (decimalni, heksadecimalni, oktalni ili binarni): ispod se pojavljuju kodovi. „Hola“ daje 72 111 108 97 u decimalnom i 48 6F 6C 61 u heksadecimalnom.
- Možete i obrnuto: zalijepite kodove odvojene razmacima ili zarezima u „Kodovi“ i sastavit će se tekst. U heksadecimalnom se prihvaćaju prefiksi poput 0x41.
Ako tekst sadrži znakove koji nisu ASCII, poput š, alat to javlja i prikazuje njihov Unicode kod. Da biste vidjeli stvarne bajtove u UTF-8, koristite „Tekst u binarni kod“: š daje 11000101 10100001, dva bajta od 8 bitova. Ograničenja: tablica prikazuje samo standardni ASCII, ne prošireni, a sve se izračunava u vašem pregledniku bez slanja teksta na ikoji poslužitelj.
Česta pitanja
Koliko znakova ima ASCII?
128, s kodovima od 0 do 127 i 7 bitova za svaki. Od toga je 33 kontrolnih, a 95 se može ispisati, računajući razmak.
Koji je ASCII kod slova A i slova a?
„A“ je 65 (41 u heksadecimalnom, 01000001 u binarnom), a „a“ je 97 (61 u heksadecimalnom, 01100001 u binarnom). Uvijek se razlikuju za 32.
Koja je razlika između ASCII-ja i Unicodea?
ASCII ima 128 znakova osmišljenih za engleski. Unicode ima više od 150.000, iz gotovo svih jezika, plus emotikone, a njegovih prvih 128 jednaki su onima iz ASCII-ja.
Što je UTF-8?
To je najčešći način spremanja Unicode teksta u bajtove. Koristi od 1 do 4 bajta po znaku: ASCII znakovi zauzimaju jedan, š zauzima dva, a emotikon četiri.
Zašto moj tekst prikazuje „Å¡“ ili „ž“?
Zato što se tekst spremljen u UTF-8 čita kao Latin-1. Otvorite datoteku navodeći kodiranje UTF-8 i problem je riješen.