ASCII i Unicode: što su i čemu služe

Računalo razumije samo brojeve, pa je svako slovo koje vidite na zaslonu zapravo kod. ASCII je bila prva tablica kodova koja je postala standard, a Unicode je ona koju danas koristimo za pisanje na bilo kojem jeziku. Ovdje vidite kako funkcioniraju, koje je kodove dobro poznavati, zašto se umjesto dijakritika ponekad pojavljuju čudni simboli i kako sve pogledati u tablici.

Ažurirano:

Š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.

Kodovi na koje ćete najčešće naići. Razmak (32) se računa kao znak koji se može ispisati, iako se ne vidi.
Kontrolni znakDecimalniHeksadecimalniBinarni (7 bitova)Čemu služi
Nul (NUL)0000000000Označava kraj niza u mnogim jezicima
Vodoravni tabulator (TAB)9090001001Skače na sljedeći tabulator
Novi redak (LF)100A0001010Spušta se u sljedeći redak
Povratak na početak retka (CR)130D0001101Vraća se na početak retka
Escape (ESC)271B0011011Pokreće kontrolne nizove
Razmak32200100000Prvi znak koji se može ispisati
Brisanje (DEL)1277F1111111Briše znak

Odnosi koje vrijedi zapamtiti

Tablica nije poredana nasumično. S nekoliko pravilnosti kodove možete čitati napamet.

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.

Što je znak dalje od ASCII-ja, to zauzima više bajtova.
ZnakKodna točkaBajtova u UTF-8Bajtovi (heksadecimalno)
AU+0041141
éU+00E92C3 A9
šU+01612C5 A1
€U+20AC3E2 82 AC
😀U+1F6004F0 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.

  1. U pretraživač upišite znak, kod ili naziv kontrolnog znaka (na primjer A, 65, 41 ili LF) da biste pronašli njegov redak.
  2. Koristite gumbe filtra (Kontrolni, Znamenke, Velika slova, Mala slova, Znakovi) da vidite samo jednu skupinu.
  3. 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.
  4. 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.