Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Windows Phone
  • Koliko znakova ima unicode tablica. Unicode na webu: Uvod za početnike

Koliko znakova ima unicode tablica. Unicode na webu: Uvod za početnike

Unicode ili Unicode (od engleske riječi Unicode) je standard za kodiranje znakova. Omogućuje kodiranje gotovo svih pisanih jezika.

Kasnih 1980-ih, 8-bitni znakovi postali su standard. 8-bitna kodiranja bila su predstavljena raznim modifikacijama, čiji je broj stalno rastao. To je uglavnom rezultat aktivnog širenja raspona jezika koji se koriste. Postojala je i želja programera da smisle kodiranje koje zahtijeva barem djelomičnu univerzalnost.

Kao rezultat toga, postalo je potrebno riješiti nekoliko problema:

  • problemi s prikazom dokumenata u pogrešnom kodiranju. Može se riješiti ili dosljednim uvođenjem metoda za određivanje korištenog kodiranja ili uvođenjem jedinstvenog kodiranja za sve;
  • problemi ograničenog paketa znakova, riješeni ili promjenom fontova u dokumentu, ili uvođenjem proširenog kodiranja;
  • problemi pretvorbe kodiranja iz jednog u drugi, za koje se činilo da je moguće riješiti bilo korištenjem međupretvorbe (treće kodiranje), uključujući znakove različitih kodiranja, ili izradom tablica pretvorbe za svaka dva kodiranja;
  • problemi umnožavanja pojedinih fontova. Tradicionalno, svako je kodiranje pretpostavljalo svoj vlastiti font, čak i kada su se kodiranja potpuno ili djelomično podudarala u skupu znakova. Donekle je problem riješen uz pomoć "velikih" fontova iz kojih su potom birani znakovi potrebni za određeno kodiranje. Ali kako bi se utvrdio stupanj usklađenosti, bilo je potrebno stvoriti jedinstveni registar simbola.

Stoga se na dnevnom redu postavilo pitanje potrebe za stvaranjem "širokog" unificiranog kodiranja. Kodiranja promjenjive duljine znakova korištena u jugoistočnoj Aziji bila su previše složena za korištenje. Stoga je naglasak stavljen na korištenje simbola fiksne širine. 32-bitni simboli djelovali su preglomazno, a na kraju su pobijedili 16-bitni.

Standard je internetskoj zajednici 1991. godine predložila neprofitna organizacija Unicode konzorcij... Njegova uporaba omogućuje kodiranje velikog broja znakova različitih vrsta pisanja. U Unicode dokumentima ni kineski znakovi, ni matematički simboli, ni ćirilica ni latinica nisu usko susjedni. Istodobno, kodne stranice ne zahtijevaju nikakve prekidače tijekom rada.

Standard se sastoji od dva glavna odjeljka: univerzalnog skupa znakova (engleski UCS) i obitelji kodiranja (u engleskom tumačenju - UTF). Univerzalni skup znakova postavlja proporcionalnost jedan prema jedan kodovima znakova. Kodovi su u ovom slučaju elementi domene koda koji su nenegativni cijeli brojevi. Funkcija obitelji kodiranja je definirati strojni prikaz niza UCS kodova.

U standardu Unicode, kodovi se ocjenjuju u nekoliko područja. Područje s kodovima koji počinju s U + 0000 i završavaju s U + 007F - uključuje znakove ASCII skupa s potrebnim kodovima. Dalje postoje područja simbola različitih pisama, tehničkih simbola, interpunkcijskih znakova. Zasebna serija kodova čuva se u rezervi za buduću upotrebu. Ćirilica kodovima definira sljedeća područja znakova: U + 0400 - U + 052F, U + 2DE0 - U + 2DFF, U + A640 - U + A69F.

Vrijednost ovog kodiranja u web prostoru neumoljivo raste. Udio web lokacija koje koriste Unicode bio je gotovo 50 posto početkom 2010.

Danas ćemo s vama razgovarati o tome odakle dolaze krakozyabri na web-mjestu iu programima, koja kodiranja teksta postoje i koja se trebaju koristiti. Razmotrimo detaljno povijest njihovog razvoja, počevši od osnovnog ASCII-a, kao i njegovih proširenih verzija CP866, KOI8-R, Windows 1251 i završavajući modernim kodiranjem Unicode konzorcija UTF 16 i 8. Sadržaj:

  • Proširene verzije Asuka - CP866 i KOI8-R kodiranja
  • Windows 1251 - ASCII varijacija i zašto krakozyabry izlaze
Nekome se ova informacija može činiti suvišnom, ali znate koliko pitanja dobivam u vezi s ispuzanim krakozyabrima (nečitljivim skupom znakova). Sada ću imati priliku uputiti sve na tekst ovog članka i samostalno pronaći svoje jambove. Pa, pripremite se za upijanje informacija i pokušajte pratiti priču.

ASCII - osnovno kodiranje teksta za latinicu

Razvoj kodiranja teksta odvijao se istodobno s formiranjem IT industrije, a tijekom tog vremena uspjeli su doživjeti dosta promjena. Povijesno gledano, sve je počelo s EBCDIC-om, koji u ruskom izgovoru nije bio eufoničan, što je omogućilo kodiranje slova latinice, arapskih brojeva i interpunkcijskih znakova kontrolnim znakovima. Ali ipak, polazište za razvoj modernih kodiranja teksta je poznato ASCII(Američki standardni kod za razmjenu informacija, koji se na ruskom obično izgovara kao "aski"). Opisuje prvih 128 znakova koje najčešće koriste korisnici engleskog govornog područja - latinična slova, arapski brojevi i interpunkcijski znakovi. Čak je i ovih 128 znakova opisanih u ASCII-u uključivalo neke uslužne simbole kao što su zagrade, hash linije, zvjezdice itd. Zapravo, i sami ih možete vidjeti:
Upravo je ovih 128 znakova iz originalne ASCII verzije postalo standard, a u bilo kojem drugom kodiranju ćete ih sigurno susresti i oni će stajati tim redoslijedom. No činjenica je da je uz pomoć jednog bajta informacija moguće kodirati ne 128, već čak 256 različitih vrijednosti (dva na stepen osam jednako je 256), dakle, nakon osnovne verzije Asuke , pojavila se cijela serija proširena ASCII kodiranja, u kojem je, osim 128 osnovnih znakova, bilo moguće kodirati simbole nacionalnog kodiranja (na primjer, ruski). Ovdje je, možda, vrijedno reći nešto više o brojevnim sustavima koji se koriste u opisu. Prvo, kao što svi znate, računalo radi samo s brojevima u binarnom sustavu, odnosno s nulama i jedinicama ("Booleova algebra", ako je netko išao na fakultet ili školu). Jedan bajt se sastoji od osam bitova, od kojih je svaki dvojka na stepen, počevši od nule i do dva u sedmom:
Nije teško razumjeti da u takvoj konstrukciji može postojati samo 256 mogućih kombinacija nula i jedinica. Vrlo je jednostavno pretvoriti broj iz binarnog sustava u decimalni. Vi samo trebate zbrojiti sve potencije dva iznad kojih postoje jedinice. U našem primjeru, ovo je 1 (2 na nulti stepen) plus 8 (dva na stepen 3), plus 32 (dva na peti stepen), plus 64 (na šesti), plus 128 (na sedmi). Zbroj dobiva 233 u decimalnom zapisu. Kao što vidite, sve je vrlo jednostavno. Ali ako pomno pogledate tablicu s ASCII znakovima, vidjet ćete da su predstavljeni u heksadecimalnom kodiranju. Na primjer, zvjezdica odgovara heksadecimalnom broju 2A u Asuki. Vjerojatno znate da se u heksadecimalnom brojevnom sustavu, osim arapskih brojeva, koriste i latinična slova od A (znači deset) do F (znači petnaest). Pa za pretvoriti binarni broj u heksadecimalni pribjegavajte sljedećoj jednostavnoj i intuitivnoj metodi. Svaki bajt informacija podijeljen je na dva dijela od četiri bita, kao što je prikazano na gornjoj snimci zaslona. Da. u svakom polubajtu, samo šesnaest vrijednosti (dvije na četvrti stepen) može se kodirati u binarnom obliku, što se lako može predstaviti kao heksadecimalni broj. Štoviše, u lijevoj polovici bajta bit će potrebno ponovno brojati stupnjeve počevši od nule, a ne kao što je prikazano na snimci zaslona. Kao rezultat, nekim jednostavnim izračunima, dobivamo da je broj E9 kodiran na snimci zaslona. Nadam se da su vam tijek mog razmišljanja i rješenje ove zagonetke bili jasni. Pa, sada nastavimo, zapravo, o kodiranju teksta.

Proširene verzije Asuke - CP866 i KOI8-R kodiranja s pseudografijom

Dakle, počeli smo razgovarati o ASCII-u, koji je, takoreći, bio polazište za razvoj svih modernih kodiranja (Windows 1251, Unicode, UTF 8). U početku je sadržavao samo 128 znakova latinične abecede, arapske brojeve i još nešto, ali u proširenoj verziji postalo je moguće koristiti svih 256 vrijednosti koje se mogu kodirati u jednom bajtu informacije. Oni. postalo je moguće dodati simbole slova vašeg jezika u Aski. Ovdje će biti potrebno još jednom skrenuti pažnju da razjasnimo - zašto su nam uopće potrebna kodiranja teksta i zašto je to toliko važno. Simboli na ekranu vašeg računala formiraju se na temelju dviju stvari - skupova vektorskih oblika (reprezentacija) svih vrsta znakova (nalaze se u datotekama s fontovima koje su instalirane na vašem računalu) i koda koji vam omogućuje izvući upravo taj iz ovog skupa vektorskih oblika (datoteka fonta) znak koji treba umetnuti na željeno mjesto. Jasno je da su sami fontovi odgovorni za vektorske oblike, ali operativni sustav i programi koji se u njemu koriste odgovorni su za kodiranje. Oni. bilo koji tekst na vašem računalu bit će skup bajtova, od kojih svaki kodira samo jedan znak tog teksta. Program koji ovaj tekst prikazuje na ekranu (uređivač teksta, preglednik itd.), prilikom raščlanjivanja koda, čita kodiranje sljedećeg znaka i traži odgovarajući vektorski oblik u potrebnoj datoteci fonta, koji je povezan za prikaz ovog tekstualni dokument. Sve je jednostavno i otrcano. To znači da za kodiranje bilo kojeg znaka koji nam je potreban (na primjer, iz nacionalne abecede), moraju biti ispunjena dva uvjeta - vektorski oblik ovog znaka mora biti u korištenom fontu i taj znak može biti kodiran u proširenim ASCII kodovima u jedan bajt. Stoga postoji cijela hrpa takvih opcija. Postoji nekoliko varijanti proširene Asuke samo za kodiranje znakova ruskog jezika. Na primjer, izvorno se pojavio CP866, u kojem je bilo moguće koristiti znakove ruske abecede i bila je proširena verzija ASCII-a. Oni. njen gornji dio se u potpunosti podudarao s osnovnom verzijom Asuke (128 latiničnih znakova, brojeva i bilo kakvog sranja), što je prikazano na snimci zaslona malo iznad, ali donji dio tablice s CP866 kodiranjem imao je pogled prikazan na snimci zaslona upravo ispod i dopušteno je kodirati još 128 znakova (ruska slova i sve vrste pseudo-grafike):
Vidite, u desnom stupcu brojevi počinju s 8, jer brojevi od 0 do 7 odnose se na osnovni ASCII dio (pogledajte prvu snimku zaslona). Da. rusko slovo "M" u CP866 imat će kod 9C (nalazi se na sjecištu odgovarajućeg retka s 9 i stupca s brojem C u heksadecimalnom zapisu), koji se može napisati u jednom bajtu informacije, a ako postoji odgovarajući font s ruskim znakovima, ovo će slovo bez problema biti prikazano u tekstu. Odakle taj iznos? pseudografija u CP866? Poanta je da je ovo kodiranje za ruski tekst razvijeno još u tim krznenim godinama, kada nije bilo takvog širenja grafičkih operativnih sustava kao što je sada. I u Dosu, i sličnim tekstualnim operativnim sustavima, pseudo-grafika je omogućila da se nekako diverzificira dizajn tekstova i stoga CP866 i svi ostali vršnjaci iz kategorije proširenih verzija Asuke obiluju njime. CP866 je distribuirao IBM, ali osim toga, razvijen je niz kodiranja za ruske znakove, na primjer, ovaj tip (prošireni ASCII) se može pripisati KOI8-R:
Princip njegova rada ostaje isti kao i kod CP866 opisanog malo ranije - svaki znak teksta kodiran je jednim bajtom. Snimka zaslona prikazuje drugu polovicu tablice KOI8-R, od prva polovica je u potpunosti u skladu s osnovnom Asukom, koja je prikazana na prvoj snimci zaslona u ovom članku. Među značajkama kodiranja KOI8-R može se primijetiti da ruska slova u njegovoj tablici nisu abecednim redom, kao što su, na primjer, učinili u CP866. Ako pogledate prvu snimku zaslona (osnovnog dijela, koji je uključen u sva proširena kodiranja), primijetit ćete da se u KOI8-R ruska slova nalaze u istim ćelijama tablice kao i slova suglasnika latinske abecede s njima iz prvog dijela stola. To je učinjeno radi praktičnosti prebacivanja s ruskih znakova na latinične znakove odbacivanjem samo jednog bita (dva na sedmu potenciju ili 128).

Windows 1251 - moderna verzija ASCII i zašto krakozyabry izaći

Daljnji razvoj kodiranja teksta bio je povezan s činjenicom da su grafički operativni sustavi postajali sve popularniji te je s vremenom nestala potreba za korištenjem pseudografike u njima. Kao rezultat toga, nastala je cijela skupina, koje su, u biti, još uvijek bile proširene verzije Asuke (jedan znak teksta je kodiran sa samo jednim bajtom informacija), ali već bez upotrebe pseudografičkih znakova. Pripadali su takozvanim ANSI kodovima, koje je razvio Američki institut za standarde. U običnom govoru, naziv ćirilice i dalje se koristio za verziju s podrškom za ruski jezik. Primjer za to je Windows 1251... Povoljno se razlikovao od prethodno korištenih CP866 i KOI8-R po tome što su mjesto pseudografskih simbola u njemu zauzeli nedostajući simboli ruske tipografije (osim znaka naglaska), kao i simboli koji se koriste u slavenskim jezicima blizak ruskom (ukrajinski, bjeloruski, itd.) ):
Zbog tolikog obilja kodiranja ruskog jezika, proizvođači fontova i softvera stalno su imali glavobolje, a mi, dragi čitatelji, često smo izvlačili one ozloglašene krakozyabry kada je došlo do zabune s verzijom korištenom u tekstu. Vrlo često su izlazile prilikom slanja i primanja poruka e-poštom, što je podrazumijevalo izradu vrlo složenih tablica konverzije, koje zapravo nisu mogle iz temelja riješiti ovaj problem, a često su korisnici za korespondenciju koristili transliteraciju latiničnih slova kako bi izbjegavajte ozloglašeni krakozyabrov kada se upotrebljavaju ruska kodiranja poput CP866, KOI8-R ili Windows 1251. Zapravo, krakozyabry koji je puzao umjesto ruskog teksta bio je rezultat pogrešne upotrebe kodiranja ovog jezika, koji se nije podudarao onaj u kojem je tekstualna poruka izvorno bila kodirana. Na primjer, ako pokušamo prikazati znakove kodirane s CP866 pomoću tablice kodova Windows 1251, tada će se pojaviti ti isti krakozyabry (besmisleni skup znakova) koji će u potpunosti zamijeniti tekst poruke. Slična se situacija vrlo često događa prilikom izrade i konfiguriranja web-mjesta, foruma ili blogova, kada se tekst s ruskim znakovima greškom sprema u pogrešnom kodiranju koje se na web-mjestu prema zadanim postavkama, ili u pogrešnom uređivaču teksta koji dodaje nevidljivi gag u kod golim okom. Na kraju, mnogi su bili umorni od ove situacije s puno kodiranja i stalno nadolazećih krakozyabera, postojali su preduvjeti za stvaranje nove univerzalne varijacije koja bi zamijenila sve postojeće i koja bi konačno riješila korijenski problem pojave nečitljivih tekstova . Osim toga, postojao je problem jezika poput kineskog, gdje je znakova jezika bilo mnogo više od 256.

Unicode - univerzalna UTF kodiranja 8, 16 i 32

Ove tisuće znakova iz grupe jezika jugoistočne Azije ne mogu se opisati u jednom bajtu informacija, koji je bio dodijeljen za kodiranje znakova u proširenim verzijama ASCII-a. Kao rezultat toga, stvoren je konzorcij tzv Unicode(Unicode - Unicode Consortium) u suradnji s brojnim liderima IT industrije (onima koji proizvode softver, koji kodiraju hardver, koji kreiraju fontove) koji su bili zainteresirani za pojavu univerzalnog kodiranja teksta. Prva varijacija objavljena pod okriljem Unicode konzorcija je bila UTF 32... Broj u nazivu kodiranja označava broj bitova koji se koriste za kodiranje jednog znaka. 32 bita su 4 bajta informacija koje će biti potrebne za kodiranje jednog znaka u novom univerzalnom UTF kodiranju. Kao rezultat toga, ista datoteka s tekstom kodiranim u proširenoj verziji ASCII-a iu UTF-32, u potonjem slučaju, imat će četiri puta veću veličinu (težinu). Ovo je loše, ali sada imamo priliku kodirati broj znakova jednak dva na stepen od trideset druge ( milijarde znakova, koji će pokriti svaku stvarno potrebnu vrijednost s kolosalnom maržom). No mnoge zemlje s jezicima europske grupe nisu trebale koristiti tako ogroman broj znakova u kodiranju, ali kada je korišten UTF-32, uzalud su primile četverostruko povećanje težine tekstualnih dokumenata, a kao rezultat, povećanje obujma internetskog prometa i količine pohranjenih podataka. Ovo je puno, a takav otpad si nitko nije mogao priuštiti. Kao rezultat razvoja Unicodea, UTF-16, koji se pokazao toliko uspješnim da je prema zadanim postavkama prihvaćen kao osnovni prostor za sve simbole koje koristimo. Koristi dva bajta za kodiranje jednog znaka. Pogledajmo kako izgleda ovaj slučaj. U operacijskom sustavu Windows možete slijediti put "Start" - "Programi" - "Dodatna oprema" - "System Tools" - "Symbol Map". Kao rezultat, otvorit će se tablica s vektorskim oblicima svih fontova instaliranih u vašem sustavu. Ako odaberete Unicode skup znakova u "Dodatni parametri", moći ćete vidjeti za svaki font zasebno cijeli asortiman znakova koji su u njemu uključeni. Usput, klikom na bilo koji od njih, možete vidjeti njegov dvobajt UTF-16 kod sastoji se od četiri heksadecimalne znamenke: Koliko znakova se može kodirati u UTF-16 sa 16 bita? 65536 (dva na stepen šesnaest), a upravo je taj broj uzet kao osnovni prostor u Unicodeu. Osim toga, postoje načini za kodiranje s njim i oko dva milijuna znakova, ali su ograničeni na prošireni prostor od milijun znakova teksta. Ali čak ni ova uspješna verzija Unicode kodiranja nije donijela puno zadovoljstva onima koji su, primjerice, pisali programe samo na engleskom, jer se nakon prelaska s proširene verzije ASCII-a na UTF-16 težina dokumenata udvostručila (jedan bajt po jednom znaku u Aski i dva bajta za isti znak u UTP-16). Upravo na zadovoljstvo svih i svih u Unicode konzorciju odlučeno je smisliti kodiranje promjenjive duljine. Nazvali su ga UTF-8. Unatoč broju osam u nazivu, stvarno ima promjenjivu duljinu, t.j. svaki znak u tekstu može se kodirati u niz od jednog do šest bajtova. U praksi se u UTF-8 koristi samo raspon od jednog do četiri bajta, jer dalje od četiri bajta koda ništa nije ni teoretski moguće zamisliti. Svi latinični znakovi u njemu su kodirani u jedan bajt, baš kao u dobrom starom ASCII-u. Ono što je vrijedno pažnje, u slučaju kodiranja samo latinice, čak i oni programi koji ne razumiju Unicode i dalje će čitati ono što je kodirano u UTF-8. Oni. osnovni dio Asuke upravo je prešao u ovu zamisao Unicode konzorcija. Ćirilični znakovi u UTF-8 kodirani su u dva bajta, a, na primjer, gruzijski - u tri bajta. Unicode konzorcij, nakon kreiranja UTF-a 16 i 8, riješio je glavni problem - sada imamo fontovi imaju jedan kodni prostor... A sada ga njihovi proizvođači mogu ispuniti samo vektorskim oblicima tekstualnih simbola na temelju svojih snaga i mogućnosti. U gornjoj "Tablici znakova" možete vidjeti da različiti fontovi podržavaju različit broj znakova. Neki fontovi bogati Unicodeom mogu biti vrlo teški. Ali sada se ne razlikuju po tome što su kreirani za različita kodiranja, već po tome što je proizvođač fontova ispunio ili nije ispunio niti jedan kodni prostor određenim vektorskim oblicima do kraja.

Krakozyabry umjesto ruskih slova - kako to popraviti

Pogledajmo sada kako se umjesto teksta pojavljuju krakozyabre, ili, drugim riječima, kako se bira ispravno kodiranje za ruski tekst. Zapravo, postavljen je u programu u kojem kreirate ili uređujete upravo ovaj tekst, odnosno kod pomoću fragmenata teksta. Za uređivanje i izradu tekstualnih datoteka osobno koristim vrlo dobar, po mom mišljenju, Html i PHP editor Notepad ++. Međutim, može istaknuti sintaksu još dobrih stotinu programskih i označnih jezika, a također ima mogućnost proširenja pomoću dodataka. Pročitajte detaljnu recenziju ovog sjajnog programa na priloženoj poveznici. U gornjem izborniku Notepad ++ nalazi se stavka "Kodiranja", gdje ćete moći pretvoriti postojeću verziju u onu koja se prema zadanim postavkama koristi na vašoj web-lokaciji:
U slučaju stranice na Joomli 1.5 i novijoj, kao i u slučaju bloga na WordPressu, kako biste izbjegli pojavu pukotina, odaberite opciju UTF 8 bez BOM-a... Što je prefiks BOM? Činjenica je da kada je razvijeno YUTF-16 kodiranje, iz nekog razloga su mu odlučili priložiti takvu stvar kao što je sposobnost pisanja koda znakova, kako u izravnom slijedu (na primjer, 0A15), tako iu obrnutom (150A) . A kako bi programi razumjeli kojim redoslijedom čitati kodove, izmišljen je BOM(Byte Order Mark ili, drugim riječima, potpis), što je izraženo u dodavanju tri dodatna bajta na samom početku dokumenata. U UTF-8 kodiranju, u Unicode konzorciju nije predviđena BOM, pa stoga dodavanje potpisa (ova najozloglašenija dodatna tri bajta na početak dokumenta) jednostavno sprječava neke programe da čitaju kod. Stoga, kada spremamo datoteke u UTP, uvijek moramo odabrati opciju bez BOM-a (bez potpisa). Dakle, napredujete zaštitite se od puzanja krakozyabrov... Važno je napomenuti da neki programi u sustavu Windows to ne mogu učiniti (ne mogu spremati tekst u UTP-8 bez BOM-a), na primjer, ozloglašeni Windows Notepad. Sprema dokument u UTF-8, ali i dalje dodaje potpis (tri dodatna bajta) na početak. Štoviše, ti će bajtovi uvijek biti isti - čitajte kod u izravnom slijedu. Ali na poslužiteljima, zbog ove sitnice, može nastati problem - krakozyabry će izaći. Dakle, nikako nemojte koristiti običnu Windows bilježnicu za uređivanje dokumenata vaše stranice, ako ne želite izgled krakozyabrsa. Najbolja i najjednostavnija opcija, mislim, je već spomenuti uređivač Notepad ++, koji praktički nema nedostataka i sastoji se samo od prednosti. U Notepad ++, pri odabiru kodiranja, moći ćete pretvoriti tekst u UCS-2 kodiranje, što je inherentno vrlo blisko Unicode standardu. Također u Notepadu će biti moguće kodirati tekst u ANSI, t.j. u odnosu na ruski jezik to ćemo već opisati odmah iznad Windowsa 1251. Odakle dolazi ova informacija? Registriran je u registru vašeg Windows operacijskog sustava - koje kodiranje odabrati u slučaju ANSI, koje odabrati u slučaju OEM (za ruski jezik to će biti CP866). Ako na svoje računalo instalirate drugi zadani jezik, ta će kodiranja biti zamijenjena sličnima iz ANSI ili OEM kategorije za isti jezik. Nakon što spremite dokument u kodiranju koji vam je potreban u Notepad ++ ili otvorite dokument s web-mjesta za uređivanje, možete vidjeti njegov naziv u donjem desnom kutu uređivača: Kako biste izbjegli krakozyabrov, uz gore opisane radnje, bit će korisno napisati informacije o ovom kodiranju u zaglavlje izvornog koda svih stranica web-mjesta kako ne bi došlo do zabune na poslužitelju ili lokalnom hostu. Općenito, u svim jezicima za označavanje hiperteksta, osim Html-a, koristi se posebna deklaracija xml koja označava kodiranje teksta.< ? xml version= "1.0" encoding= "windows-1251" ? >Prije početka raščlanjivanja koda, preglednik će znati koja se verzija koristi i kako točno treba tumačiti znakovne kodove ovog jezika. No, važno je napomenuti da ako spremite dokument u zadani unicode, tada se ova xml deklaracija može izostaviti (kodiranje će se smatrati UTF-8 ako nema BOM ili YUTF-16 ako postoji BOM). U slučaju HTML dokumenta, navedeno je kodiranje Meta element, koji je napisan između početne i završne oznake Head: < head> . . . < meta charset= "utf-8" > . . . < / head>Ovaj unos se dosta razlikuje od onog prihvaćenog u standardu u Html 4.01, ali je u potpunosti usklađen s novim Html 5 standardom koji se polako uvodi, te će ga svi trenutno korišteni preglednici razumjeti 100% ispravno. U teoriji, Meta element koji ukazuje na kodiranje HTML dokumenta bio bi bolje postavljen što je više moguće u zaglavlju dokumenta tako da bi u trenutku susreta s prvim znakom u tekstu koji nije iz osnovnog ANSI (koji se uvijek čita ispravno i u bilo kojoj varijaciji) preglednik već trebao imati informaciju kako interpretirati kodove tih znakova. Veza na prvu

Unicode je vrlo velik i složen svijet, jer vam standard omogućuje predstavljanje i rad na računalu sa svim glavnim skriptama svijeta. Neki sustavi pisanja postoje već više od tisuću godina, a mnogi od njih su se razvili gotovo neovisno jedan o drugom u različitim dijelovima svijeta. Ljudi su izmislili toliko stvari i često su toliko različite jedni od drugih da je bio izuzetno težak i ambiciozan zadatak sve to spojiti u jedan standard.

Da biste stvarno razumjeli Unicode, morate barem površno zamisliti značajke svih skripti s kojima vam standard omogućuje rad. No, je li to doista potrebno svakom programeru? Reći ćemo ne. Za korištenje Unicodea u većini svakodnevnih zadataka dovoljno je znati razuman minimum informacija, a zatim se po potrebi udubljivati ​​u standard.

U ovom ćemo članku govoriti o osnovnim principima Unicodea i istaknuti ona važna praktična pitanja s kojima će se programeri zasigurno suočiti u svom svakodnevnom radu.

Zašto vam je trebao Unicode?

Prije pojave Unicodea, jednobajtna kodiranja su bila gotovo univerzalno korištena, u kojoj je granica između samih znakova, njihov prikaz u memoriji računala i prikaz na ekranu bila prilično proizvoljna. Ako ste radili s jednim ili drugim nacionalnim jezikom, tada su na vaš sustav instalirana odgovarajuća kodiranja fontova, što je omogućilo izvlačenje bajtova s ​​diska na ekranu na način da korisniku ima smisla.

Ako ste ispisali tekstualnu datoteku na pisaču i vidjeli skup nerazumljivih krakozyabra na papirnatoj stranici, to je značilo da odgovarajući fontovi nisu učitani u uređaj za ispis i on interpretira bajtove na drugačiji način nego što biste željeli.

Ovaj pristup općenito, a posebno jednobajtna kodiranja, imali su niz značajnih nedostataka:

  1. Moglo se raditi istovremeno sa samo 256 znakova, a prvih 128 bilo je rezervirano za latinicu i kontrolne znakove, a u drugoj polovici, osim znakova nacionalne abecede, trebalo je pronaći mjesto za pseudografiku znakova (╔ ╗).
  2. Fontovi su bili vezani uz određeno kodiranje.
  3. Svako kodiranje predstavljalo je svoj skup znakova, a pretvorba iz jednog u drugi bila je moguća samo uz djelomične gubitke, kada su nedostajući znakovi zamijenjeni grafički sličnim.
  4. Prijenos datoteka između uređaja s različitim operativnim sustavima bio je težak. Bilo je potrebno ili imati program za pretvaranje, ili nositi dodatne fontove uz datoteku. Postojanje Interneta kakvog poznajemo bilo je nemoguće.
  5. U svijetu postoje neabecedni sustavi pisanja (hijeroglifsko pisanje), koji u jednobajtnom kodiranju u principu nisu reprezentativni.

Osnovna načela Unicodea

Svi mi savršeno dobro razumijemo da računalo ne zna ni za kakve idealne entitete, već radi s bitovima i bajtovima. Ali računalne sustave i dalje stvaraju ljudi, a ne strojevi, i ponekad je vama i meni prikladnije operirati spekulativnim konceptima, a zatim prijeći od apstraktnog prema konkretnom.

Važno! Jedno od središnjih načela Unicode filozofije je jasna razlika između znakova, njihovog prikaza na računalu i njihovog prikaza na izlaznom uređaju.

Uvodi se koncept apstraktnog unicode lika, koji postoji isključivo u obliku spekulativnog koncepta i dogovora među ljudima, ugrađenog u standard. Svaki Unicode znak povezan je s nenegativnim cijelim brojem koji se naziva njegova kodna točka.

Tako je, na primjer, unicode znak U + 041F veliko ćirilično slovo P. Postoji nekoliko načina da se ovaj znak predstavi u memoriji računala, kao što postoji nekoliko tisuća načina da se prikaže na ekranu monitora. Ali u isto vrijeme P, također će biti P ili U + 041F u Africi.

Ovo je poznata inkapsulacija, ili odvajanje sučelja od implementacije, koncept koji je dobro funkcionirao u programiranju.

Ispada da se, vodeći se standardom, svaki tekst može kodirati kao niz unicode znakova

Pozdrav U + 041F U + 0440 U + 0438 U + 0432 U + 0435 U + 0442

zapišite to na komad papira, zapakirajte u kuvertu i pošaljite u bilo koji dio svijeta. Ako znaju za postojanje Unicodea, onda će tekst percipirati na potpuno isti način kao i vi i ja. Neće imati ni najmanje sumnje da je predzadnji znak upravo mala ćirilica e(U + 0435) ne reci latinica mala e(U + 0065). Imajte na umu da nismo rekli ni riječi o bajt reprezentaciji.

Unicode kodni prostor

Unicode kodni prostor sastoji se od 1 114 112 kodnih točaka, u rasponu od 0 do 10FFFF. Od toga je samo 128 237 dodijeljeno vrijednosti za devetu verziju standarda. Dio prostora rezerviran je za privatnu upotrebu, a Unicode konzorcij obećava da nikada neće dodijeliti vrijednosti pozicijama iz ovih posebnih područja.

Radi praktičnosti, cijeli je prostor podijeljen na 17 ravnina (sada ih je uključeno šest). Donedavno je bilo uobičajeno reći da ćete se najvjerojatnije morati suočiti samo s osnovnom višejezičnom ravninom (BMP), koja uključuje Unicode znakove od U + 0000 do U + FFFF. (Gledajući malo unaprijed: BMP znakovi su predstavljeni u UTF-16 u dva bajta, a ne u četiri). U 2016. ta teza je već u dvojbi. Tako se, na primjer, popularni Emoji znakovi mogu naći u korisničkoj poruci i morate ih moći ispravno obraditi.

Kodiranja

Ako želimo slati tekst putem Interneta, onda moramo kodirati niz unicode znakova kao slijed bajtova.

Unicode standard uključuje niz Unicode kodiranja, kao što su UTF-8 i UTF-16BE / UTF-16LE, koji omogućuju kodiranje cijelog prostora kodnih točaka. Pretvorba između ovih kodiranja može se slobodno izvesti bez gubitka informacija.

Također, nitko nije otkazao jednobajtna kodiranja, ali oni vam omogućuju da kodirate svoj pojedinačni i vrlo uski dio Unicode spektra - 256 ili manje kodnih točaka. Za takva kodiranja postoje tablice koje su dostupne svima, gdje je svaka vrijednost jednog bajta pridružena unicode znaku (vidi, na primjer, CP1251.TXT). Unatoč ograničenjima, jednobajtna kodiranja pokazuju se vrlo praktičnim kada je u pitanju rad s velikim nizom jednojezičnih tekstualnih informacija.

UTF-8 je najčešće korišteno Unicode kodiranje na Internetu (osvojio je palmu 2008. godine), uglavnom zbog svoje ekonomičnosti i transparentne kompatibilnosti sa sedmobitnim ASCII-jem. Latinski i službeni znakovi, osnovni interpunkcijski znakovi i brojevi – t.j. svi sedmobitni ASCII znakovi su kodirani u UTF-8 u jednom bajtu, isto kao u ASCII. Znakovi mnogih glavnih pisama, osim nekih rjeđih hijeroglifskih znakova, u njemu su predstavljeni s dva ili tri bajta. Najveća kodna točka definirana standardom, 10FFFF, kodirana je u četiri bajta.

Imajte na umu da je UTF-8 kodiranje promjenjive duljine. Svaki Unicode znak u njemu predstavljen je nizom kvanta koda s minimalnom duljinom od jednog kvanta. Broj 8 označava bitnu duljinu kodne jedinice - 8 bita. Za UTF-16 obitelj kodiranja, veličina kvanta koda je 16 bita. Za UTF-32 - 32 bita.

Ako putem mreže šaljete HTML stranicu s ćiriličnim tekstom, onda UTF-8 može dati vrlo opipljivu korist, jer sve oznake kao i JavaScript i CSS blokovi bit će učinkovito kodirani u jednom bajtu. Na primjer, glavna stranica Habra u UTF-8 je 139Kb, a u UTF-16 je već 256Kb. Za usporedbu, ako koristite win-1251 uz gubitak mogućnosti pohrane nekih znakova, tada će se veličina smanjiti za samo 11Kb.

Za pohranu podataka o nizovima u aplikacijama često se koriste 16-bitna unicode kodiranja zbog njihove jednostavnosti, kao i činjenice da su znakovi glavnih svjetskih sustava pisanja kodirani u jednom šesnaest-bitnom kvantu. Tako, na primjer, Java uspješno koristi UTF-16 za interni prikaz stringova. Operativni sustav Windows također interno koristi UTF-16.

U svakom slučaju, sve dok ostajemo u Unicode prostoru, nije zapravo važno kako su informacije o nizovima pohranjene unutar jedne aplikacije. Ako vam format interne pohrane omogućuje ispravno kodiranje svih više od milijun kodnih točaka i nema gubitka informacija na granici aplikacije, na primjer, prilikom čitanja iz datoteke ili kopiranja u međuspremnik, onda je sve u redu.

Za ispravnu interpretaciju teksta pročitanog s diska ili iz mrežne utičnice, prvo morate odrediti njegovo kodiranje. To se radi ili korištenjem meta informacija koje je dostavio korisnik, napisanih u tekstu ili blizu njega, ili se određuje heuristički.

U suhom ostatku

Informacija je puno i ima smisla dati kratak sažetak svega što je gore napisano:

  • Unicode postulira jasnu razliku između znakova, njihovog prikaza na računalu i njihovog prikaza na izlaznom uređaju.
  • Unicode kodni prostor sastoji se od 1 114 112 kodnih točaka, u rasponu od 0 do 10FFFF.
  • Osnovna višejezična ravnina uključuje Unicode znakove U + 0000 do U + FFFF, koji su kodirani u UTF-16 u dva bajta.
  • Bilo koje Unicode kodiranje omogućuje vam kodiranje cijelog prostora Unicode kodnih točaka i pretvorba između različitih takvih kodiranja se provodi bez gubitka informacija.
  • Jednobajtna kodiranja mogu kodirati samo mali dio unicode spektra, ali mogu biti korisna pri radu s velikom količinom jednojezičnih informacija.
  • UTF-8 i UTF-16 kodiranja imaju promjenjive duljine koda. U UTF-8, svaki Unicode znak može biti kodiran s jednim, dva, tri ili četiri bajta. U UTF-16, dva ili četiri bajta.
  • Interni format pohrane tekstualnih informacija unutar zasebne aplikacije može biti proizvoljan, pod uvjetom da ispravno radi s cijelim prostorom Unicode kodnih točaka i da nema gubitka u prekograničnom prijenosu podataka.

Kratka napomena o kodiranju

Može doći do zabune s pojmom kodiranje. Unutar Unicodea, kodiranje se događa dvaput. Prvi put kada se kodira skup znakova, u smislu da je svakom Unicode znaku dodijeljena odgovarajuća kodna točka. Ovaj proces pretvara Unicode skup znakova u kodirani skup znakova. Drugi put kada se niz unicode znakova pretvara u niz bajtova, ovaj se proces također naziva kodiranjem.

U engleskoj terminologiji postoje dva različita glagola kodirati i kodirati, ali čak su i izvorni govornici često zbunjeni oko njih. Osim toga, izraz skup znakova ili skup znakova koristi se kao sinonim za pojam kodirani skup znakova.

Sve to govorimo o tome da ima smisla obratiti pozornost na kontekst i razlikovati situacije kada je u pitanju kodna pozicija apstraktnog unicode znaka i kada je u pitanju njegova bajt reprezentacija.

Konačno

Postoji toliko mnogo različitih aspekata Unicodea da je nemoguće pokriti sve u jednom članku. I nepotrebno. Gore navedene informacije dovoljne su da se izbjegne zabuna u osnovnim principima i rad s tekstom u većini svakodnevnih zadataka (čitaj: bez napuštanja BMP-a). U sljedećim ćemo člancima govoriti o normalizaciji, dati potpuniji povijesni pregled razvoja kodiranja, govoriti o problemima terminologije Unicode na ruskom jeziku, a također ćemo napraviti materijal o praktičnim aspektima korištenja UTF-8 i UTF-16 .

Unicode: UTF-8, UTF-16, UTF-32.

Unicode je skup grafičkih znakova i način njihovog kodiranja za računalnu obradu tekstualnih podataka.

Unicode ne samo da dodjeljuje jedinstveni kod svakom znaku, već također definira različite karakteristike tog znaka, na primjer:

    vrsta znaka (veliko slovo, malo slovo, broj, interpunkcijski znak itd.);

    atributi znakova (prikaz slijeva nadesno ili zdesna nalijevo, razmak, prijelom reda itd.);

    odgovarajuće veliko ili malo slovo (za mala i velika slova, respektivno);

    odgovarajuću brojčanu vrijednost (za numeričke znakove).

    Standardi UTF(kratica za Unicode Transformation Format) za predstavljanje znakova:

UTF-16: Podešavanje sustava Windows, ubrzavanje, FAQ Vista koristi UTF-16 kodiranje za predstavljanje svih Unicode znakova. U UTF-16 znakovi su predstavljeni s dva bajta (16 bita). Ovo se kodiranje koristi u Windowsima jer 16-bitne vrijednosti mogu predstavljati znakove koji čine abecede većine jezika na svijetu, što omogućuje programima da obrađuju nizove i brže izračunavaju njihovu duljinu. Međutim, 16-bit nije dovoljan za predstavljanje abecednih znakova u nekim jezicima. U takvim slučajevima, UTE-16 podržava "surogat" kodiranja, dopuštajući kodiranje znakova u 32 bita (4 bajta). Međutim, malo je aplikacija koje se moraju nositi sa znakovima takvih jezika, pa je UTF-16 dobar kompromis između uštede memorije i jednostavnosti programiranja. Imajte na umu da .NET Framework kodira sve znakove koristeći UTF-16, tako da korištenje UTF-16 u Windows aplikacijama poboljšava performanse i smanjuje potrošnju memorije prilikom prosljeđivanja nizova između izvornog i upravljanog koda.

UTF-8: U UTF-8 kodiranju, različiti znakovi mogu biti predstavljeni s 1, 2, 3 ili 4 bajta. Znakovi s vrijednostima manjim od 0x0080 komprimirani su na 1 bajt, što je vrlo zgodno za američke znakove. Znakovi koji odgovaraju vrijednostima u rasponu 0x0080-0x07FF pretvaraju se u 2-bajtne vrijednosti, što dobro funkcionira s europskim i bliskoistočnim alfabetima. Znakovi s većim vrijednostima pretvaraju se u vrijednosti od 3 bajta, što je korisno za rad sa srednjoazijskim jezicima. Konačno, surogat parovi su zapisani u 4-bajtnom formatu. UTF-8 je iznimno popularno kodiranje. Međutim, manje je učinkovit od UTF-16 ako se često koriste znakovi s vrijednostima 0x0800 i više.

UTF-32: U UTF-32, svi znakovi su predstavljeni s 4 bajta. Ovo kodiranje je prikladno za pisanje jednostavnih algoritama za nabrajanje znakova na bilo kojem jeziku koji ne zahtijevaju obradu znakova predstavljenih različitim brojem bajtova. Na primjer, kada koristite UTF-32, možete zaboraviti na "surogate", budući da je svaki znak u ovom kodiranju predstavljen s 4 bajta. Jasno, sa stajališta korištenja memorije, učinkovitost UTF-32 je daleko od idealne. Stoga se ovo kodiranje rijetko koristi za prijenos nizova preko mreže i njihovo spremanje u datoteke. Obično se UTF-32 koristi kao interni format za predstavljanje podataka u programu.

UTF-8

U bliskoj budućnosti, poseban Unicode (i ISO 10646) format tzv UTF-8... Ovo "izvedeno" kodiranje koristi nizove bajtova različitih duljina (od jednog do šest) za pisanje znakova, koji se pretvaraju u Unicode kodove pomoću jednostavnog algoritma, s kraćim nizovima koji odgovaraju uobičajenijim znakovima. Glavna prednost ovog formata je kompatibilnost s ASCII ne samo u vrijednostima kodova, već i u broju bitova po znaku, budući da je jedan bajt dovoljan za kodiranje bilo kojeg od prvih 128 znakova u UTF-8 (iako je , na primjer, za ćirilična slova, dva bajta).

Format UTF-8 izumili su 2. rujna 1992. Ken Thompson i Rob Pike i implementirali ga u Plan 9. UTF-8 standard je sada formaliziran u RFC 3629 i ISO / IEC 10646 Aneks D.

Za web dizajnera, ovo je kodiranje od posebne važnosti, jer je upravo ono deklarirano kao "standardno kodiranje dokumenta" u HTML-u od verzije 4.

Tekst koji sadrži samo znakove s brojevima manjim od 128 pretvara se u običan ASCII tekst kada je napisan u UTF-8. Suprotno tome, u tekstu UTF-8, svaki bajt s vrijednošću manjom od 128 predstavlja ASCII znak s istim kodom. Ostatak Unicode znakova predstavljen je nizovima dugim od 2 do 6 bajta (zapravo samo do 4 bajta, budući da nije planirano korištenje kodova većih od 221), u kojima prvi bajt uvijek izgleda kao 11xxxxxx, a ostatak - 10xxxxxx.

Jednostavno rečeno, u UTF-8 formatu, latinični znakovi, interpunkcija i ASCII kontrolni znakovi su napisani u US-ASCII kodovima, a svi ostali znakovi su kodirani pomoću nekoliko okteta s najvažnijim bitom 1. To ima dva učinka.

    Čak i ako program ne prepozna Unicode, latinična slova, arapski brojevi i interpunkcijski znakovi bit će prikazani ispravno.

    Ako latinična slova i jednostavni interpunkcijski znakovi (uključujući razmak) zauzimaju značajnu količinu teksta, UTF-8 daje veći volumen u usporedbi s UTF-16.

    Na prvi pogled može se činiti da je UTF-16 prikladniji, budući da je većina znakova kodirana u točno dva bajta. Međutim, to je negirano potrebom za podrškom surogat parova, koji se često zanemaruju kada se koristi UTF-16, implementirajući samo podršku za UCS-2 znakove.

Standard je 1991. godine predložio Unicode Consortium, Unicode Inc., neprofitna organizacija. Korištenje ovog standarda omogućuje kodiranje vrlo velikog broja znakova iz različitih pisama: kineski znakovi, matematički znakovi, slova grčke abecede, latinice i ćirilice mogu koegzistirati u Unicode dokumentima, tako da mijenjanje kodnih stranica postaje nepotrebno.

Standard se sastoji od dva glavna odjeljka: univerzalnog skupa znakova (UCS) i Unicode formata transformacije (UTF). Univerzalni skup znakova definira jedan-na-jedan korespondenciju znakova kodovima - elementima kodnog prostora koji predstavljaju nenegativne cijele brojeve. Obitelj kodiranja definira strojni prikaz niza UCS kodova.

Unicode standard razvijen je s ciljem stvaranja jedinstvenog kodiranja znakova za sve moderne i mnoge drevne pisane jezike. Svaki znak u ovom standardu je kodiran u 16 bita, što mu omogućuje da pokrije neusporedivo veći broj znakova od prethodno prihvaćenih 8-bitnih kodiranja. Još jedna važna razlika između Unicodea i drugih sustava kodiranja je da ne samo da svakom znaku dodjeljuje jedinstveni kod, već također definira različite karakteristike ovog znaka, na primjer:

Vrsta znaka (veliko slovo, malo slovo, broj, interpunkcijski znak itd.);

Atributi znakova (zaslon slijeva nadesno ili zdesna nalijevo, razmak, prijelom reda, itd.);

Odgovarajuće veliko ili malo slovo (za mala i velika slova, respektivno);

Odgovarajuća brojčana vrijednost (za numeričke znakove).

Cijeli raspon kodova od 0 do FFFF podijeljen je u nekoliko standardnih podskupova, od kojih svaki odgovara ili abecedi određenog jezika, ili skupini posebnih znakova koji su slični u svojim funkcijama. Dijagram u nastavku daje opći popis Unicode 3.0 podskupova (slika 2).

Slika 2

Unicode standard je osnova za pohranu i tekst u mnogim modernim računalnim sustavima. Međutim, nije kompatibilan s većinom internetskih protokola, budući da njegovi kodovi mogu sadržavati bilo koje vrijednosti bajta, a protokoli obično koriste bajtove 00 - 1F i FE - FF kao nadređene. Za postizanje interoperabilnosti razvijeno je nekoliko Unicode transformacijskih formata (UTF, Unicode Transformation Formats), od kojih je UTF-8 danas najčešći. Ovaj format definira sljedeća pravila za pretvaranje svakog Unicode koda u skup bajtova (jedan do tri) prikladnih za prijenos internetskim protokolima.


Ovdje x, y, z označavaju bitove izvornog koda koje treba izdvojiti, počevši od najmanje značajnog, i unijeti u bajtove rezultata s desna na lijevo dok se ne popune sva navedena mjesta.

Daljnji razvoj Unicode standarda povezan je s dodavanjem novih jezičnih ravnina, t.j. znakova u rasponima 10000 - 1FFFF, 20000 - 2FFFF, itd., gdje bi trebalo uključiti kodiranje za pisma mrtvih jezika koja nisu uključena u gornju tablicu. Za kodiranje ovih dodatnih znakova razvijen je novi UTF-16 format.

Dakle, postoje 4 glavna načina kodiranja Unicode bajtova:

UTF-8: 128 znakova je kodirano u jednom bajtu (ASCII format), 1920 znakova je kodirano u 2 bajta ((rimski, grčki, ćirilični, koptski, armenski, hebrejski, arapski znakovi), 63488 znakova je kodirano u 3 bajta (kineski , japanski i drugi) Preostalih 2.147.418.112 znakova (još nisu korišteni) mogu se kodirati s 4, 5 ili 6 bajtova.

UCS-2: Svaki znak je predstavljen s 2 bajta. Ovo kodiranje uključuje samo prvih 65.535 znakova iz Unicode formata.

UTF-16: Ovo je proširenje za UCS-2 i uključuje 1 114 112 Unicode znakova. Prvih 65.535 znakova predstavljeno je s 2 bajta, a ostali s 4 bajta.

USC-4: Svaki znak je kodiran u 4 bajta.

Vrhunski povezani članci