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.
| Kontrolni znak | Desetiško | Šestnajstiško | Dvojiško (7 bitov) | Čemu služi |
|---|---|---|---|---|
| Nič (NUL) | 0 | 00 | 0000000 | Označuje konec niza v več jezikih |
| Vodoravni tabulator (TAB) | 9 | 09 | 0001001 | Skoči na naslednji tabulator |
| Pomik v novo vrstico (LF) | 10 | 0A | 0001010 | Spusti se v naslednjo vrstico |
| Vrnitev na začetek vrstice (CR) | 13 | 0D | 0001101 | Vrne se na začetek vrstice |
| Ubežni znak (ESC) | 27 | 1B | 0011011 | Začne kontrolna zaporedja |
| Presledek | 32 | 20 | 0100000 | Prvi tiskljivi znak |
| Izbris (DEL) | 127 | 7F | 1111111 | Izbriše znak |
Odnosi, ki si jih je vredno zapomniti
Tabela ni urejena naključno. Z nekaj pravilnostmi lahko kode bereš na pamet.
- Števke od »0« do »9« zasedajo od 48 do 57 (30 do 39 v šestnajstiškem zapisu). Vrednost števke je njena koda minus 48: »7« je 55 in 55 − 48 = 7.
- Velike črke gredo od 65 (»A«) do 90 (»Z«), male od 97 (»a«) do 122 (»z«).
- Razlika med veliko črko in njeno malo je vedno 32: »A« = 65 in »a« = 97; »C« = 67 in »c« = 99. V dvojiškem zapisu se spremeni samo en bit: 01000001 za »A« in 01100001 za »a«.
- Da izveš, katero mesto v abecedi zaseda velika črka, odštej 64: »C« je 67 in 67 − 64 = 3, tretja črka.
- Ker imajo vse velike črke (65 do 90) manjše kode kot male (97 do 122), abecedni vrstni red »po kodi« postavi »Zebra« pred »apple«. Mnogi programi potrebujejo ločeno možnost primerjave za pravilno razvrščanje.
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.
| Znak | Kodna točka | Bajti v UTF-8 | Bajti (šestnajstiško) |
|---|---|---|---|
| A | U+0041 | 1 | 41 |
| é | U+00E9 | 2 | C3 A9 |
| ñ | U+00F1 | 2 | C3 B1 |
| € | U+20AC | 3 | E2 82 AC |
| 😀 | U+1F600 | 4 | F0 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.
- 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.
- Uporabi gumbe za filtriranje (Kontrolni, Števke, Velike črke, Male črke, Simboli), da vidiš samo eno skupino.
- 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.
- 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.