ASCII in Unicode: kaj sta in za kaj služita

Računalnik razume samo števila, zato je vsaka črka, ki jo vidiš na zaslonu, koda. ASCII je bila prva tabela kod, ki je postala standard, Unicode pa je tista, ki jo danes uporabljamo za pisanje v katerem koli jeziku. Tu vidiš, kako delujeta, katere kode je dobro poznati, zakaj se namesto naglasov in strešic včasih pojavijo čudni znaki in kako vse poiskati v tabeli.

Posodobljeno:

Kaj je kodiranje znakov

Kodiranje je dogovor: »število 65 pomeni črko A«. Ko pišeš besedilo, program shrani ta števila; ko ga odpre druga oseba, jih njen program z istim dogovorom prevede nazaj v črke. Če ne uporabljata iste tabele, se besedilo pokvari.

Ločiti je treba dve zamisli. Ena je nabor znakov, seznam, katera števila ustrezajo katerim simbolom. Druga je, kako se ta števila shranijo v bajte. Pri ASCII se obe ujemata na preprost način; pri Unicode ne, in tu nastopi UTF-8.

ASCII: 128 znakov s 7 biti

ASCII (kratica za American Standard Code for Information Interchange) je bil standardiziran v šestdesetih letih. Uporablja 7 bitov, torej 2 na 7 = 128 kod, od 0 do 127. Od teh je 33 kontrolnih znakov (od 0 do 31 in 127) in 95 tiskljivih (od 32 do 126, vključno s presledkom).

Ne vključuje črk z naglasi, ne črk č, š in ž, ne znaka za evro: zasnovan je bil za angleščino. To pojasni, zakaj so pozneje potrebne druge tabele.

Kode, ki jih boš srečal najpogosteje. Presledek (32) šteje za tiskljivega, čeprav ga ne vidiš.
Kontrolni znakDesetiškoŠestnajstiškoDvojiško (7 bitov)Čemu služi
Nič (NUL)0000000000Označuje konec niza v več jezikih
Vodoravni tabulator (TAB)9090001001Skoči na naslednji tabulator
Pomik v novo vrstico (LF)100A0001010Spusti se v naslednjo vrstico
Vrnitev na začetek vrstice (CR)130D0001101Vrne se na začetek vrstice
Ubežni znak (ESC)271B0011011Začne kontrolna zaporedja
Presledek32200100000Prvi tiskljivi znak
Izbris (DEL)1277F1111111Izbriše znak

Odnosi, ki si jih je vredno zapomniti

Tabela ni urejena naključno. Z nekaj pravilnostmi lahko kode bereš na pamet.

Konec vrstice: LF, CR in CRLF

Pomik v novo vrstico se zdi preprost, a se v različnih sistemih zapiše drugače. Unix, Linux in macOS uporabljajo en sam znak, LF (10). Windows uporablja dva zaporedoma, CR in LF (13 in 10), znana kot CRLF. Stari teleprinterji so potrebovali dva ločena ukaza: vrnitev vozička na začetek in pomik papirja za eno vrstico.

Ta razlika je vzrok za datoteke, ki so v osnovnem urejevalniku videti kot ena sama vrstica ali pa imajo čuden znak na koncu vsake vrstice. Če iščeš, katero kodo ima posamezni, vpiši LF ali CR v iskalnik tabele ASCII.

»Razširjeni ASCII« ni standard

Ker ima bajt 8 bitov in ASCII uporablja samo 7, je ostalo 128 prostih kod (od 128 do 255) in vsak proizvajalec in regija ju je napolnil po svoje. Temu pravimo »razširjeni ASCII«, vendar ne obstaja ena sama tabela: je jih veliko, imenujemo jih kodne strani. Dve najbolj znani sta Latin-1 (ISO-8859-1), kjer je é koda 233, in Windows-1252, podobna, a z razlikami v kodah od 128 do 159 (tam je na primer evro). Za srednjeevropske jezike, vključno s slovenščino, je bila v rabi Latin-2 (ISO-8859-2), kjer je č koda 232.

Težava je, da koda 233 v eni tabeli pomeni »é«, v drugi pa nekaj drugega. Besedilo, napisano z eno tabelo in prebrano z drugo, je pokazalo nesmisel. Unicode je nastal, da bi ta nered končal.

Unicode in UTF-8

Unicode vsakemu znaku skoraj vseh pisnih sistemov na svetu, poleg tega simbolom in emojijem, dodeli enolično število, imenovano kodna točka. Danes ima več kot 150.000 znakov. Zapiše se s predpono U+ in v šestnajstiškem zapisu: »A« je U+0041, »ñ« je U+00F1, evro je U+20AC, emoji nasmejanega obraza pa U+1F600. Prvih 128 kodnih točk je natanko tistih iz ASCII.

UTF-8 je najpogostejši način shranjevanja teh števil v bajte in uporablja od 1 do 4 bajte, odvisno od znaka. Teh 128 iz ASCII zaseda en sam bajt, enak kot vedno, zato je besedilo ASCII tudi veljavno besedilo UTF-8. Ostalo zaseda več bajtov.

Dlje ko je znak od ASCII, več bajtov zaseda.
ZnakKodna točkaBajti v UTF-8Bajti (šestnajstiško)
AU+0041141
éU+00E92C3 A9
ñU+00F12C3 B1
€U+20AC3E2 82 AC
😀U+1F6004F0 9F 98 80

Zakaj se pojavi »Ã±« namesto »ñ«

To je najpogostejša napaka in ima natančno razlago. Črka ñ v UTF-8 sta dva bajta: C3 in B1. Če program meni, da je besedilo v Latin-1, prebere vsak bajt kot en znak: C3 je »Ã«, B1 je »±«. Rezultat: »Ã±«. Enako se zgodi z »é«, ki se vidi kot »Ã©«, in s slovensko črko ž, ki sta v UTF-8 bajta C5 in BE ter se prikaže kot »Å¾«; tako beseda »žaba« postane »Å¾aba«.

Rešitev je skoraj vedno, da programu poveš, naj datoteko odpre kot UTF-8 (v urejevalniku besedil ali v nastavitvah uvoza preglednice). Ko se zgodi obratno, besedilo v Latin-1 prebrano kot UTF-8, se običajno pojavijo rombi z vprašajem, ker ti posamezni bajti ne tvorijo veljavnih zaporedij UTF-8.

Kako uporabljati tabelo ASCII in pretvornik

Orodje ASCII tabela prikaže 128 znakov z njihovo kodo v desetiškem, šestnajstiškem, osmiškem in dvojiškem zapisu ter ime kontrolnih.

  1. V iskalnik Poišči znak ali kodo vpiši znak, kodo ali ime kontrolnega znaka (na primer A, 65, 41 ali LF), da najdeš njegovo vrstico.
  2. Uporabi gumbe za filtriranje (Kontrolni, Števke, Velike črke, Male črke, Simboli), da vidiš samo eno skupino.
  3. Za pretvorbo vpiši besedilo v polje Besedilo in izberi obliko (desetiško, šestnajstiško, osmiško ali dvojiško): spodaj se prikažejo kode. »Hola« da 72 111 108 97 v desetiškem in 48 6F 6C 61 v šestnajstiškem zapisu.
  4. Lahko tudi obratno: prilepi kode, ločene s presledki ali vejicami, v polje Kode in sestavi se besedilo. V šestnajstiškem zapisu so sprejete predpone, kot je 0x41.

Če besedilo vsebuje znake, ki niso ASCII, kot je ñ ali š, orodje to sporoči in prikaže njihovo kodo Unicode. Za ogled dejanskih bajtov v UTF-8 uporabi Besedilo v dvojiško: ñ da 11000011 10110001, dva 8-bitna bajta. Omejitve: tabela prikazuje samo standardni ASCII, ne razširjenega, vse pa se izračuna v tvojem brskalniku, ne da bi besedilo poslali na kateri koli strežnik.

Pogosta vprašanja

Koliko znakov ima ASCII?

128, s kodami od 0 do 127 in po 7 biti vsak. Od teh jih je 33 kontrolnih in 95 tiskljivih, vštevši presledek.

Kakšna je koda ASCII črke A in črke a?

»A« je 65 (41 v šestnajstiškem, 01000001 v dvojiškem zapisu) in »a« je 97 (61 v šestnajstiškem, 01100001 v dvojiškem zapisu). Vedno se razlikujeta za 32.

Kakšna je razlika med ASCII in Unicode?

ASCII ima 128 znakov, zasnovanih za angleščino. Unicode jih ima več kot 150.000, iz skoraj vseh jezikov in emojije, njegovih prvih 128 pa je enakih kot v ASCII.

Kaj je UTF-8?

To je najpogostejši način shranjevanja besedila Unicode v bajte. Uporablja od 1 do 4 bajte na znak: znaki ASCII zasedejo enega, črka ñ dva in emoji štiri.

Zakaj moje besedilo prikazuje »Ã±« ali »Ã©«?

Ker se besedilo, shranjeno v UTF-8, bere kot Latin-1. Datoteko odpri z navedbo kodiranja UTF-8 in težava je rešena.