Codificare conform standardului internațional Unicode. Unicode pe web: o introducere pentru începători

Unicode sau Unicode (din cuvântul englezesc Unicode) este un standard de codificare a caracterelor. Face posibil ca aproape toate limbile scrise să fie reprezentate în codificare.

La sfârșitul anilor 1980, rolul standardului a fost atribuit caracterelor pe 8 biți. Codificările pe 8 biți au fost reprezentate de diverse modificări, al căror număr era în continuă creștere. Acesta a fost în principal rezultatul unei extinderi active a gamei de limbi utilizate. A existat și în rândul dezvoltatorilor dorința de a veni cu o codificare care să pretindă cel puțin universalitate parțială.

Ca urmare, a devenit necesară rezolvarea mai multor probleme:

  • Probleme cu afișarea documentelor în codificare incorectă. Ar putea fi rezolvată fie prin introducerea consecventă a unor metode de specificare a codificării utilizate, fie prin introducerea unei singure codări pentru toată lumea;
  • probleme ale pachetelor cu caractere limitate, care pot fi rezolvate fie prin schimbarea fonturilor în document, fie prin introducerea codării extinse;
  • problema transformării codificărilor de la una la alta, care părea posibil de rezolvat fie prin utilizarea unei transformări intermediare (a treia codificare), incluzând caractere din diferite codificări, fie prin compilarea tabelelor de conversie pentru fiecare două codificări;
  • probleme cu duplicarea fonturilor individuale. În mod tradițional, fiecare codificare presupunea prezența propriului font, chiar și atunci când codificările coincideau complet sau parțial în setul de caractere. Într-o oarecare măsură, problema a fost rezolvată cu ajutorul fonturilor „mari”, din care apoi au fost selectate caracterele necesare pentru o anumită codificare. Dar pentru a determina gradul de conformitate, a fost necesar să se creeze un registru unificat de simboluri.

Astfel, problema necesității de a crea o codificare unificată „largă” a fost pe ordinea de zi. Codificările de caractere variabile folosite în Asia de Sud-Est păreau prea dificil de utilizat. Prin urmare, s-a pus accent pe utilizarea unui caracter care are o lățime fixă. Caracterele pe 32 de biți păreau prea greoaie, iar caracterele pe 16 biți au câștigat în cele din urmă.

Standardul a fost propus comunității Internet în 1991 de către o organizație non-profit „Consorțiul Unicode”. Utilizarea sa face posibilă codificarea unui număr mare de caractere de diferite tipuri de scriere. În documentele Unicode, nici caracterele chinezești, nici simbolurile matematice, nici alfabetul chirilic, nici alfabetul latin nu se află în imediata apropiere. În acest caz, paginile de cod nu necesită nicio comutare în timpul funcționării.

Standardul constă din două secțiuni principale: setul de caractere universal (UCS) și familia de codare (UTF în engleză). Setul de caractere universal stabilește o proporționalitate unică cu codurile de caractere. Codurile în acest caz sunt elemente ale sferei de cod, care sunt numere întregi nenegative. Funcția unei familii de codificare este de a determina reprezentarea automată a unei secvențe de coduri UCS.

În standardul Unicode, codurile sunt clasificate în mai multe zone. Codurile de zonă de la U+0000 la U+007F includ caractere ASCII cu codurile necesare. Mai departe există zone de simboluri ale diferitelor scripturi, simboluri tehnice și semne de punctuație. Un lot separat de coduri este păstrat în rezervă pentru utilizare ulterioară. Următoarele zone de caractere cu coduri sunt definite pentru alfabetul chirilic: U+0400 - U+052F, U+2DE0 - U+2DFF, U+A640 - U+A69F.

Importanța acestei codificări în spațiul web crește inexorabil. Ponderea site-urilor care foloseau Unicode era de aproape 50% la începutul anului 2010.

Astăzi vă vom vorbi despre de unde provin krakozyabr-urile pe un site web și în programe, ce codificări de text există și care ar trebui folosite. Să aruncăm o privire mai atentă asupra istoriei dezvoltării lor, pornind de la ASCII de bază, precum și versiunile sale extinse CP866, KOI8-R, Windows 1251 și terminând cu codificări moderne ale consorțiului Unicode UTF 16 și 8. Cuprins:

  • Versiuni extinse de Asuka - codificări CP866 și KOI8-R
  • Windows 1251 - Varianta ASCII și de ce iese krakozyabry
Pentru unii, această informație poate părea inutilă, dar știți câte întrebări primesc în mod specific cu privire la krakozyabrs (setul de caractere imposibil de citit). Acum voi avea ocazia să trimit tuturor la textul acestui articol și să-mi găsesc propriile greșeli. Ei bine, pregătiți-vă să absorbiți informațiile și încercați să urmăriți fluxul poveștii.

ASCII - codificarea de bază a textului pentru alfabetul latin

Dezvoltarea codificărilor de text a avut loc concomitent cu formarea industriei IT, iar în acest timp au reușit să sufere destul de multe schimbări. Din punct de vedere istoric, totul a început cu EBCDIC, care era destul de disonantă în pronunția rusă, ceea ce a făcut posibilă codificarea literelor alfabetului latin, a cifrelor arabe și a semnelor de punctuație cu caractere de control. Dar totuși, punctul de plecare pentru dezvoltarea codificărilor moderne de text ar trebui considerat celebrul ASCII(Codul standard american pentru schimbul de informații, care în rusă este de obicei pronunțat „aski”). Descrie primele 128 de caractere utilizate cel mai frecvent de utilizatorii vorbitori de limba engleză - litere latine, cifre arabe și semne de punctuație. Aceste 128 de caractere descrise în ASCII au inclus și unele caractere de serviciu, cum ar fi paranteze, semne hash, asteriscuri etc. De fapt, le puteți vedea singur:
Aceste 128 de caractere din versiunea originală ASCII au devenit standardul, iar în orice altă codificare le veți găsi cu siguranță și vor apărea în această ordine. Dar adevărul este că cu un octet de informații puteți codifica nu 128, ci până la 256 de valori diferite (două la puterea lui opt este egală cu 256), așa că după versiunea de bază a Asuka o serie întreagă de codificări ASCII extinse, în care, pe lângă 128 de caractere de bază, a fost posibilă și codificarea simbolurilor codificării naționale (de exemplu, rusă). Aici, probabil că merită să spunem puțin mai multe despre sistemele de numere care sunt utilizate în descriere. În primul rând, după cum știți cu toții, un computer funcționează doar cu numere în sistemul binar, și anume cu zerouri și unu („algebră booleană”, dacă cineva l-a luat la un institut sau la școală). Un octet este format din opt biți, fiecare dintre care o putere a doi, începând de la zero și terminând cu doi până la a șaptea putere:
Nu este greu de înțeles că toate combinațiile posibile de zerouri și unu într-un astfel de design pot fi doar 256. Convertirea unui număr din sistemul binar în sistemul zecimal este destul de simplă. Trebuie doar să aduni toate puterile a doi cu una deasupra lor. În exemplul nostru, acesta se dovedește a fi 1 (2 la puterea lui zero) plus 8 (două la puterea lui 3), plus 32 (două la puterea a cincea), plus 64 (la puterea a șasea), plus 128 (la puterea a saptea). Totalul este 233 în notație zecimală. După cum puteți vedea, totul este foarte simplu. Dar dacă te uiți îndeaproape la tabelul cu caractere ASCII, vei vedea că acestea sunt reprezentate în codificare hexazecimală. De exemplu, „asteriscul” corespunde numărului hexazecimal 2A din Aski. Probabil știți că în sistemul numeric hexazecimal, pe lângă cifrele arabe, sunt folosite și litere latine de la A (înseamnă zece) la F (înseamnă cincisprezece). Ei bine, atunci, pentru conversia unui număr binar în hexazecimal recurge la următoarea metodă simplă și evidentă. Fiecare octet de informații este împărțit în două părți de patru biți, așa cum se arată în captura de ecran de mai sus. Acea. În fiecare jumătate de octet, doar șaisprezece valori (de la două până la a patra putere) pot fi codificate în binar, care poate fi ușor reprezentat ca un număr hexazecimal. Mai mult, în jumătatea stângă a octetului, gradele vor trebui să fie numărate din nou începând de la zero și nu așa cum se arată în captura de ecran. Drept urmare, prin calcule simple, obținem că numărul E9 este codificat în captură de ecran. Sper că cursul raționamentului meu și soluția acestui puzzle v-au fost clare. Ei bine, acum să continuăm, de fapt, să vorbim despre codificări de text.

Versiuni extinse de Asuka - codificări CP866 și KOI8-R cu pseudografice

Așadar, am început să vorbim despre ASCII, care a fost, parcă, punctul de plecare pentru dezvoltarea tuturor codificărilor moderne (Windows 1251, Unicode, UTF 8). Inițial, conținea doar 128 de caractere din alfabetul latin, cifre arabe și altceva, dar în versiunea extinsă a devenit posibilă utilizarea tuturor celor 256 de valori care pot fi codificate într-un octet de informații. Acestea. A devenit posibil să adăugați simboluri ale literelor din limba dvs. la Aski. Aici va trebui să ne abatem din nou pentru a explica - De ce avem nevoie de codificări de text?și de ce este atât de important. Caracterele de pe ecranul computerului sunt formate pe baza a două lucruri - seturi de forme vectoriale (reprezentări) de tot felul de caractere (sunt în fișiere cu fonturi care sunt instalate pe computer) și cod care vă permite să scoateți exact acela din acest set de forme vectoriale (fișier font).simbol care va trebui introdus la locul potrivit. Este clar că fonturile în sine sunt responsabile pentru formele vectoriale, dar sistemul de operare și programele utilizate în el sunt responsabile pentru codificare. Acestea. orice text de pe computer va fi un set de octeți, fiecare dintre care codifică un singur caracter al acestui text. Programul care afișează acest text pe ecran (editor de text, browser etc.), atunci când analizează codul, citește codificarea următorului caracter și caută forma vectorială corespunzătoare în fișierul de font necesar, care este conectat pentru a afișa acest text. document text. Totul este simplu și banal. Aceasta înseamnă că pentru a codifica orice caracter de care avem nevoie (de exemplu, din alfabetul național), trebuie îndeplinite două condiții - forma vectorială a acestui caracter trebuie să fie în fontul folosit și acest caracter ar putea fi codificat în codificări ASCII extinse în un octet. Prin urmare, există o mulțime de astfel de opțiuni. Doar pentru codificarea caracterelor în limba rusă, există mai multe varietăți de Aska extins. De exemplu, a apărut inițial CP866, care avea capacitatea de a folosi caractere din alfabetul rus și era o versiune extinsă a ASCII. Acestea. partea superioară a coincis complet cu versiunea de bază a Aska (128 de caractere latine, numere și alte prostii), care este prezentată în captura de ecran de mai sus, dar partea inferioară a tabelului cu codificare CP866 avea aspectul indicat în captura de ecran de mai jos. și v-a permis să codificați alte 128 de semne (litere rusești și tot felul de pseudografice):
Vedeți, în coloana din dreapta numerele încep cu 8, pentru că... numerele de la 0 la 7 se referă la partea de bază a ASCII (vezi prima captură de ecran). Acea. Litera rusă „M” din CP866 va avea codul 9C (se află la intersecția rândului corespunzător cu 9 și a coloanei cu numărul C în sistemul numeric hexazecimal), care poate fi scris într-un octet de informații și dacă există un font potrivit cu caractere rusești, această scrisoare fără probleme va apărea în text. De unde aceasta suma? pseudografic în CP866? Ideea este că această codificare pentru textul rusesc a fost dezvoltată în acei ani greșiți, când sistemele de operare grafică nu erau atât de răspândite ca acum. Și în Dosa și sisteme de operare cu text similare, pseudografica a făcut posibilă cel puțin diversificarea designului textelor și, prin urmare, CP866 și toți ceilalți colegi din categoria versiunilor extinse ale Asuka abundă în el. CP866 a fost distribuit de IBM, dar în plus, au fost dezvoltate o serie de codificări pentru caracterele în limba rusă, de exemplu, același tip (ASCII extins) poate fi atribuit KOI8-R:
Principiul funcționării sale rămâne același cu cel al CP866 descris puțin mai devreme - fiecare caracter al textului este codificat de un singur octet. Captura de ecran arată a doua jumătate a tabelului KOI8-R, deoarece prima jumătate este complet în concordanță cu Asuka de bază, care este afișată în prima captură de ecran din acest articol. Printre caracteristicile codificării KOI8-R, se poate remarca faptul că literele rusești din tabelul său nu sunt în ordine alfabetică, așa cum, de exemplu, au făcut-o în CP866. Dacă vă uitați la prima captură de ecran (a părții de bază, care este inclusă în toate codificările extinse), veți observa că în KOI8-R literele rusești sunt situate în aceleași celule ale tabelului ca și literele corespunzătoare ale alfabetului latin din prima parte a tabelului. Acest lucru a fost făcut pentru comoditatea trecerii de la caracterele rusești la caractere latine, eliminând doar un bit (două la a șaptea putere sau 128).

Windows 1251 - versiunea modernă de ASCII și de ce apar fisurile

Dezvoltarea în continuare a codificărilor de text s-a datorat faptului că sistemele de operare grafică câștigau popularitate și nevoia de a folosi pseudografice în ele a dispărut în timp. Ca urmare, a apărut un întreg grup care, în esență, erau încă versiuni extinse ale Asuka (un caracter al textului este codificat cu doar un octet de informații), dar fără utilizarea simbolurilor pseudografice. Ele aparțineau așa-numitelor codificări ANSI, care au fost dezvoltate de Institutul American de Standarde. În limbajul comun, numele chirilic a fost folosit și pentru versiunea cu suport pentru limba rusă. Un exemplu în acest sens ar putea fi Windows 1251. S-a diferențiat în mod favorabil de CP866 și KOI8-R utilizate anterior prin faptul că locul simbolurilor pseudografice în el a fost luat de simbolurile lipsă ale tipografiei ruse (cu excepția semnului de accent), precum și de simbolurile utilizate în limbile slave apropiate de Rusă (ucraineană, belarusă etc.):
Datorită unei asemenea abundențe de codificări în limba rusă, producătorii de fonturi și producătorii de software au avut în mod constant dureri de cap, iar tu și cu mine, dragi cititori, am avut adesea aceleași notorii. krakozyabry când a existat confuzie cu versiunea folosită în text. Foarte des au ieșit la iveală la trimiterea și primirea mesajelor prin e-mail, ceea ce a presupus crearea unor tabele de conversie foarte complexe, care, de fapt, nu puteau rezolva în mod fundamental această problemă, iar de multe ori utilizatorii foloseau transliterarea literelor latine pentru corespondență pentru a evitați farsele notorii atunci când utilizați codificări rusești precum CP866, KOI8-R sau Windows 1251. De fapt, fisurile apărute în locul textului rusesc au fost rezultatul utilizării incorecte a codificării unei anumite limbi, care nu corespundea celei din în care mesajul text a fost codificat inițial. Să presupunem că, dacă încercați să afișați caractere codificate folosind CP866 utilizând tabelul de coduri Windows 1251, atunci vor apărea aceleași farfurii (un set de caractere fără sens), înlocuind complet textul mesajului. O situație similară apare foarte des atunci când se creează și se creează site-uri web, forumuri sau bloguri, când textul cu caractere rusești este salvat din greșeală în codificarea greșită, care este utilizată implicit pe site, sau în editorul de text greșit, care adaugă un gag invizibil. la codul cu ochiul liber. În cele din urmă, mulți oameni s-au săturat de această situație cu o mulțime de codificări și încontinuu porcării, iar premisele au apărut pentru crearea unei noi variante universale care să le înlocuiască pe toate pe cele existente și să rezolve în sfârșit problema cu aspectul. a textelor ilizibile. În plus, a fost problema limbilor precum chineza, unde erau mult mai multe caractere de limbă decât 256.

Unicode - codificări universale UTF 8, 16 și 32

Aceste mii de caractere ale grupului de limbi din Asia de Sud-Est nu au putut fi descrise într-un octet de informații care au fost alocate pentru codificarea caracterelor în versiunile extinse de ASCII. Ca urmare, a fost creat un consorțiu numit Unicode(Unicode - Unicode Consortium) cu colaborarea multor lideri din industria IT (cei care produc software, care codifică hardware, care creează fonturi), care au fost interesați de apariția unei codări universale de text. Prima variantă lansată sub auspiciile Consorțiului Unicode a fost UTF 32. Numărul din numele de codificare înseamnă numărul de biți care sunt utilizați pentru a codifica un caracter. 32 de biți echivalează cu 4 octeți de informații care vor fi necesari pentru a codifica un singur caracter în noua codificare UTF universală. Ca urmare, același fișier cu text codificat în versiunea extinsă a ASCII și în UTF-32, în acest din urmă caz, va avea o dimensiune (greutate) de patru ori mai mare. Acest lucru este rău, dar acum avem posibilitatea de a codifica folosind YTF un număr de caractere egal cu două la puterea de treizeci de secunde ( miliarde de caractere, care va acoperi orice valoare cu adevărat necesară cu o marjă colosală). Dar multe țări cu limbi ale grupului european nu au avut deloc nevoie să folosească un număr atât de mare de caractere în codificare, cu toate acestea, atunci când foloseau UTF-32, au primit fără niciun motiv o creștere de patru ori a ponderii documentelor text, și, ca urmare, o creștere a volumului de trafic pe Internet și a volumului de date stocate. Este mult și nimeni nu și-ar putea permite o astfel de risipă. Ca urmare a dezvoltării Unicode, UTF-16, care s-a dovedit a fi atât de reușit încât a fost adoptat implicit ca spațiu de bază pentru toate caracterele pe care le folosim. Folosește doi octeți pentru a codifica un caracter. Să vedem cum arată chestia asta. În sistemul de operare Windows, puteți urma calea „Start” - „Programe” - „Accesorii” - „Instrumente de sistem” - „Tabel de caractere”. Ca rezultat, se va deschide un tabel cu formele vectoriale ale tuturor fonturilor instalate pe sistemul dumneavoastră. Dacă selectați setul de caractere Unicode în „Opțiuni avansate”, veți putea vedea pentru fiecare font separat întreaga gamă de caractere incluse în acesta. Apropo, făcând clic pe oricare dintre ele, îi puteți vedea pe doi octeți cod în format UTF-16, format din patru cifre hexazecimale: Câte caractere pot fi codificate în UTF-16 folosind 16 biți? 65.536 (doi la puterea lui șaisprezece), iar acesta este numărul care a fost adoptat ca spațiu de bază în Unicode. În plus, există modalități de a codifica aproximativ două milioane de caractere folosindu-l, dar acestea au fost limitate la un spațiu extins de un milion de caractere de text. Dar nici această versiune de succes a codificării Unicode nu a adus prea multe satisfacții celor care au scris, să zicem, programe doar în limba engleză, deoarece pentru ei, după trecerea de la versiunea extinsă a ASCII la UTF-16, greutatea documentelor s-a dublat ( un octet per caracter în Aski și doi octeți pentru același caracter în YUTF-16). Tocmai pentru satisfacția tuturor și a tuturor celor din consorțiul Unicode s-a decis vin cu o codificare lungime variabilă. Se numea UTF-8. În ciuda celor opt din nume, are de fapt o lungime variabilă, adică. Fiecare caracter al textului poate fi codificat într-o secvență de la unu până la șase octeți. În practică, UTF-8 folosește doar intervalul de la unu la patru octeți, deoarece dincolo de patru octeți de cod nu mai este nici măcar posibil teoretic să ne imaginăm ceva. Toate caracterele latine din el sunt codificate într-un octet, la fel ca în vechiul ASCII. Ceea ce este de remarcat este că, în cazul codificării numai a alfabetului latin, chiar și acele programe care nu înțeleg Unicode vor citi în continuare ceea ce este codificat în YTF-8. Acestea. partea de bază a Asuka a fost pur și simplu transferată la această creație a consorțiului Unicode. Caracterele chirilice în UTF-8 sunt codificate în doi octeți și, de exemplu, cele georgiane - în trei octeți. Consorțiul Unicode, după ce a creat UTF 16 și 8, a rezolvat principala problemă - acum avem fonturile au un singur spațiu de cod. Și acum producătorii lor îl pot completa doar cu forme vectoriale de caractere text pe baza punctelor forte și a capacităților lor. În „Tabelul de caractere” de mai sus puteți vedea că diferite fonturi acceptă un număr diferit de caractere. Unele fonturi bogate în Unicode pot fi destul de grele. Dar acum ele diferă nu prin faptul că au fost create pentru diferite codificări, ci prin faptul că producătorul fontului a umplut sau nu complet spațiul unic de cod cu anumite forme vectoriale.

Cuvinte nebunești în loc de litere rusești - cum să o rezolvi

Să vedem acum cum apar krakozyabrurile în loc de text sau, cu alte cuvinte, cum este selectată codificarea corectă pentru textul rusesc. De fapt, este setat în programul în care creați sau editați chiar acest text, sau codați folosind fragmente de text. Pentru a edita și a crea fișiere text, personal folosesc un foarte bun, după părerea mea, editor Html și PHP Notepad++. Cu toate acestea, poate evidenția sintaxa a sute de alte limbaje de programare și de marcare și are, de asemenea, capacitatea de a fi extins folosind plugin-uri. Citiți o recenzie detaliată a acestui minunat program la link-ul furnizat. În meniul de sus al Notepad++ există un element „Codări”, unde veți avea posibilitatea de a converti o opțiune existentă în cea utilizată implicit pe site-ul dvs.:
În cazul unui site pe Joomla 1.5 și versiuni ulterioare, precum și în cazul unui blog pe WordPress, ar trebui să selectați opțiunea pentru a evita apariția fisurilor UTF 8 fără BOM. Care este prefixul BOM? Faptul este că, atunci când dezvoltau codificarea YUTF-16, dintr-un motiv oarecare au decis să-i atașeze un astfel de lucru precum capacitatea de a scrie codul caracterelor atât în ​​secvență directă (de exemplu, 0A15), cât și invers (150A). . Și pentru ca programele să înțeleagă exact în ce secvență să citească codurile, a fost inventat BOM(Byte Order Mark sau, cu alte cuvinte, semnătură), care a fost exprimată prin adăugarea a trei octeți suplimentari chiar la începutul documentelor. În codificarea UTF-8, consorțiul Unicode nu prevedea BOM-uri și, prin urmare, adăugarea unei semnături (acei notorii trei octeți suplimentari la începutul documentului) împiedică pur și simplu unele programe să citească codul. Prin urmare, atunci când salvăm fișiere în UTF, trebuie să selectăm întotdeauna opțiunea fără BOM (fără semnătură). Deci ești în avans protejează-te de crakozyabrs care se târăsc. Ceea ce este de remarcat este că unele programe din Windows nu pot face acest lucru (nu pot salva text în UTF-8 fără BOM), de exemplu, același Windows Notepad notoriu. Salvează documentul în UTF-8, dar încă adaugă semnătura (trei octeți suplimentari) la începutul acestuia. Mai mult, acești octeți vor fi întotdeauna aceiași - citiți codul în secvență directă. Dar pe servere, din cauza acestui mic lucru, poate apărea o problemă - vor ieși escrocii. Prin urmare, sub nicio formă Nu utilizați notepad Windows obișnuit pentru a edita documente de pe site-ul dvs. dacă nu doriți să apară crăpături. Consider că editorul Notepad++ deja menționat este cea mai bună și mai simplă opțiune, care practic nu are dezavantaje și constă doar în avantaje. În Notepad++, atunci când selectați o codificare, veți avea opțiunea de a converti textul în codificare UCS-2, care este foarte apropiată de standardul Unicode. De asemenea, în Notepad va fi posibilă codificarea textului în ANSI, adică. în legătură cu limba rusă, acesta va fi Windows 1251, pe care l-am descris deja mai sus.De unde provin aceste informații? Este înregistrat în registrul sistemului dvs. de operare Windows - ce codificare să alegeți în cazul ANSI, pe care să alegeți în cazul OEM (pentru limba rusă va fi CP866). Dacă instalați o altă limbă implicită pe computer, atunci aceste codificări vor fi înlocuite cu altele similare din categoria ANSI sau OEM pentru aceeași limbă. După ce salvați documentul în Notepad++ în codificarea de care aveți nevoie sau deschideți documentul de pe site pentru editare, puteți vedea numele acestuia în colțul din dreapta jos al editorului: Pentru a evita rednecks Pe lângă acțiunile descrise mai sus, va fi util să scrieți informații despre această codificare în antetul codului sursă al tuturor paginilor site-ului, astfel încât să nu existe confuzii pe server sau pe gazda locală. În general, toate limbajele de marcare hipertext, cu excepția HTML, folosesc o declarație xml specială, care specifică codificarea textului.< ? xml version= "1.0" encoding= "windows-1251" ? >Înainte de a analiza codul, browserul știe ce versiune este utilizată și cât de exact trebuie să interpreteze codurile de caractere ale acelei limbi. Dar ceea ce este de remarcat este că, dacă salvați documentul în Unicode implicit, atunci această declarație xml poate fi omisă (codificarea va fi considerată UTF-8 dacă nu există BOM sau UTF-16 dacă există o BOM). În cazul unui document în limbaj HTML, codificarea este utilizată pentru a indica Element meta, care este scris între etichetele Head de deschidere și de închidere: < head> . . . < meta charset= "utf-8" > . . . < / head>Această intrare este destul de diferită de cea adoptată în standard în Html 4.01, dar respectă pe deplin noul standard Html 5 care este introdus treptat și va fi înțeles complet corect de orice browser utilizat în prezent. În teorie, ar fi mai bine să plasați un element Meta care indică codificarea documentului HTML cât mai sus posibil în antetul documentului astfel încât în ​​momentul întâlnirii primului caracter din text nu din ANSI de bază (care sunt întotdeauna citite corect și în orice variație), browserul ar trebui să aibă deja informații despre modul de interpretare a codurilor acestor caractere. Link la primul

Unicode este o lume foarte mare și complexă, deoarece standardul vă permite să reprezentați și să lucrați pe un computer cu toate scripturile principale ale lumii. Unele sisteme de scriere există de mai bine de o mie de ani, multe dintre ele dezvoltându-se aproape independent unele de altele în diferite părți ale lumii. Oamenii au venit cu atât de multe lucruri și sunt adesea atât de diferiți unul de celălalt încât să le combine pe toate într-un singur standard a fost o sarcină extrem de dificilă și ambițioasă.

Pentru a înțelege cu adevărat Unicode, trebuie să aveți o înțelegere cel puțin superficială a caracteristicilor tuturor scripturilor cu care standardul vă permite să lucrați. Dar de asta are nevoie fiecare dezvoltator? Vom spune nu. Pentru a utiliza Unicode pentru majoritatea sarcinilor de zi cu zi, este suficient să cunoașteți un minim rezonabil de cunoștințe și apoi să vă aprofundați în standard după cum este necesar.

În acest articol vom vorbi despre principiile de bază ale Unicode și vom evidenția acele probleme practice importante pe care dezvoltatorii le vor întâlni cu siguranță în munca lor de zi cu zi.

De ce a fost nevoie de Unicode?

Înainte de apariția Unicode, codificările pe un singur octet erau folosite aproape universal, în care granița dintre caracterele în sine, reprezentarea lor în memoria computerului și afișarea pe ecran era destul de arbitrară. Dacă ați lucrat cu una sau alta limbă națională, atunci fonturile de codare corespunzătoare au fost instalate în sistemul dvs., ceea ce v-a permis să extrageți octeți de pe disc de pe ecran în așa fel încât să aibă sens pentru utilizator.

Dacă ați tipărit un fișier text pe o imprimantă și ați văzut un set de farfurii de neînțeles pe pagina de hârtie, aceasta însemna că fonturile adecvate nu au fost încărcate în dispozitivul de imprimare și nu a interpretat octeții așa cum ați dori.

Această abordare, în general, și codificările pe un singur octet, în special, au avut o serie de dezavantaje semnificative:

  1. S-a putut lucra simultan cu doar 256 de caractere, primele 128 fiind rezervate caracterelor latine și de control, iar în a doua jumătate, pe lângă simbolurile alfabetului național, a fost necesar să se găsească un loc pentru simbolurile pseudografice ( ╔ ╗).
  2. Fonturile au fost legate de o anumită codificare.
  3. Fiecare codificare reprezenta propriul set de caractere, iar conversia de la unul la altul era posibilă doar cu pierderi parțiale, când caracterele lipsă erau înlocuite cu altele similare grafic.
  4. Transferul fișierelor între dispozitive care rulează sisteme de operare diferite a fost dificil. Fie trebuia să aveți un program de conversie, fie să aveți fonturi suplimentare împreună cu fișierul. Existența Internetului așa cum îl știm noi a fost imposibilă.
  5. Există în lume sisteme de scriere non-alfabetică (scriere hieroglifică), care în principiu nu pot fi reprezentate într-o codificare pe un singur octet.

Principiile de bază ale Unicode

Cu toții înțelegem perfect că un computer nu știe despre nicio entitate ideală, dar funcționează cu biți și octeți. Dar sistemele informatice sunt încă create de oameni, nu de mașini, iar pentru tine și pentru mine, uneori este mai convenabil să operezi cu concepte speculative și apoi să treci de la abstract la concret.

Important! Unul dintre principiile centrale ale filozofiei Unicode este distincția clară între caractere, reprezentarea lor într-un computer și afișarea lor pe un dispozitiv de ieșire.

Se introduce conceptul de caracter abstract Unicode, existând exclusiv sub forma unui concept speculativ și acord între oameni, consacrat în standard. Fiecare caracter Unicode este asociat cu un număr întreg nenegativ numit punctul său de cod.

De exemplu, caracterul Unicode U+041F este litera chirilică P. Există mai multe moduri de a reprezenta acest caracter în memoria computerului, precum și câteva mii de moduri de a-l afișa pe ecranul monitorului. Dar în același timp P, va fi și P sau U+041F în Africa.

Aceasta este încapsularea sau separarea familiară a interfeței de implementare - un concept care s-a dovedit bine în programare.

Se dovedește că, ghidat de standard, orice text poate fi codificat ca o secvență de caractere Unicode

Bună ziua U+041F U+0440 U+0438 U+0432 U+0435 U+0442

notează-l pe o foaie de hârtie, împachetează-l într-un plic și trimite-l în orice parte a lumii. Dacă ei știu despre existența Unicode, atunci textul va fi perceput de ei exact în același mod ca și de către tine și mine. Nu vor avea nici cea mai mică îndoială că penultimul personaj este literul chirilic e(U+0435), și nu spune latină mic e(U+0065). Observați că nu am spus un cuvânt despre reprezentarea octeților.

Spațiu cod Unicode

Spațiul de cod Unicode este format din 1.114.112 de poziții de cod cuprinse între 0 și 10FFFF. Dintre acestea, doar 128.237 li s-au atribuit valori pentru versiunea a noua a standardului.O parte din spațiu este rezervat uzului privat și Consorțiul Unicode promite să nu atribuie niciodată valori pozițiilor din aceste zone speciale.

Din motive de comoditate, întregul spațiu este împărțit în 17 avioane (șase dintre ele sunt utilizate în prezent). Până de curând, se spunea că, cel mai probabil, veți întâlni doar Planul Multilingv de bază (BMP), care include caractere Unicode de la U+0000 la U+FFFF. (Privind puțin înainte: caracterele din BMP sunt reprezentate în UTF-16 de doi octeți, nu de patru). În 2016, această teză este deja în dubiu. De exemplu, caracterele Emoji populare pot apărea într-un mesaj de utilizator și trebuie să le puteți procesa corect.

Codificări

Dacă dorim să trimitem text prin Internet, va trebui să codificăm o secvență de caractere Unicode ca o secvență de octeți.

Standardul Unicode include o descriere a unui număr de codificări Unicode, cum ar fi UTF-8 și UTF-16BE/UTF-16LE, care permit codificarea întregului spațiu de caractere. Conversia între aceste codificări poate fi efectuată în mod liber, fără pierderea de informații.

De asemenea, nimeni nu a anulat codificări pe un singur octet, dar vă permit să vă codificați propria bucată individuală și foarte îngustă a spectrului Unicode - 256 sau mai puține poziții de cod. Pentru astfel de codificări, tabele există și sunt disponibile pentru toată lumea, unde fiecare valoare a unui singur octet este asociată cu un caracter Unicode (vezi, de exemplu, CP1251.TXT). În ciuda limitărilor, codificările pe un singur octet se dovedesc a fi foarte practice atunci când vine vorba de lucrul cu o gamă largă de informații text monolingve.

Dintre codificările Unicode, cea mai comună pe Internet este UTF-8 (a câștigat palma în 2008), în principal datorită eficienței și compatibilității sale transparente cu ASCII pe șapte biți. Caractere latine și de serviciu, semne de punctuație de bază și numere - i.e. toate caracterele ASCII pe șapte biți sunt codificate în UTF-8 ca un octet, la fel ca în ASCII. Caracterele multor scripturi majore, fără a număra unele caractere hieroglifice mai rare, sunt reprezentate în el prin doi sau trei octeți. Cea mai mare poziție de cod definită de standard, 10FFFF, este codificată în patru octeți.

Vă rugăm să rețineți că UTF-8 este o codificare cu lungime variabilă a codului. Fiecare caracter Unicode din el este reprezentat de o secvență de cuantice de cod cu o lungime minimă de un cuantic. Numărul 8 înseamnă lungimea de biți a unității de cod (unitatea de cod) - 8 biți. Pentru familia de codare UTF-16, dimensiunea cuantumului codului este, în consecință, de 16 biți. Pentru UTF-32 - 32 de biți.

Dacă trimiteți o pagină HTML cu text chirilic prin rețea, atunci UTF-8 poate oferi un beneficiu foarte semnificativ, deoarece toate markupurile, precum și blocurile JavaScript și CSS, vor fi codificate efectiv într-un octet. De exemplu, pagina principală a lui Habr în UTF-8 ocupă 139Kb, iar în UTF-16 este deja de 256Kb. Pentru comparație, dacă utilizați win-1251 cu pierderea capacității de a salva unele caractere, dimensiunea va fi redusă cu doar 11Kb.

Pentru a stoca informații despre șiruri în aplicații, codificări Unicode pe 16 biți sunt adesea folosite datorită simplității lor, precum și faptului că caracterele principalelor sisteme de scriere ale lumii sunt codificate într-un cuantic de șaisprezece biți. De exemplu, Java folosește cu succes UTF-16 pentru reprezentarea șirurilor interne. Sistemul de operare Windows utilizează, de asemenea, UTF-16 intern.

În orice caz, atâta timp cât rămânem în spațiul Unicode, nu contează cu adevărat modul în care informațiile șir sunt stocate într-o aplicație individuală. Dacă formatul de stocare internă vă permite să codificați corect toate cele peste milioane de poziții de cod și nu există nicio pierdere de informații la limita aplicației, de exemplu atunci când citiți dintr-un fișier sau copiați în clipboard, atunci totul este în regulă.

Pentru a interpreta corect textul citit de pe un disc sau de pe o priză de rețea, trebuie mai întâi să determinați codificarea acestuia. Acest lucru se face fie folosind meta-informații furnizate de utilizator, scrise în text sau adiacent textului, fie determinate euristic.

Concluzie

Există o mulțime de informații și este logic să facem un scurt rezumat a tot ceea ce a fost scris mai sus:

  • Unicode postulează o distincție clară între caractere, reprezentarea lor într-un computer și afișarea lor pe un dispozitiv de ieșire.
  • Spațiul de cod Unicode este format din 1.114.112 de poziții de cod cuprinse între 0 și 10FFFF.
  • Planul multilingv de bază include caractere Unicode U+0000 până la U+FFFF, care sunt codificate în UTF-16 ca doi octeți.
  • Orice codificare Unicode vă permite să codificați întregul spațiu al pozițiilor codului Unicode, iar conversia între diferite astfel de codificări se realizează fără pierderi de informații.
  • Codificările pe un singur octet permit codificarea doar unei mici părți din spectrul Unicode, dar pot fi utile atunci când lucrați cu cantități mari de informații monolingve.
  • Codificările UTF-8 și UTF-16 au lungimi variabile de cod. În UTF-8, fiecare caracter Unicode poate fi codificat pe unul, doi, trei sau patru octeți. În UTF-16 - doi sau patru octeți.
  • Formatul intern pentru stocarea informațiilor text într-o aplicație separată poate fi arbitrar, cu condiția să funcționeze corect cu întregul spațiu al pozițiilor codului Unicode și să nu existe pierderi în timpul transferului transfrontalier de date.

O notă rapidă despre codificare

Poate exista o oarecare confuzie cu termenul de codificare. În Unicode, codificarea are loc de două ori. Prima dată când un set de caractere Unicode este codificat, în sensul că fiecărui caracter Unicode i se atribuie o poziție de cod corespunzătoare. Acest proces transformă setul de caractere Unicode într-un set de caractere codat. A doua oară, secvența de caractere Unicode este convertită într-un șir de octeți și acest proces se mai numește și codificare.

În terminologia engleză, există două verbe diferite, a codifica și a codifica, dar chiar și vorbitorii nativi sunt adesea confundați cu ele. În plus, termenul set de caractere sau set de caractere este folosit ca sinonim pentru termenul set de caractere codat.

Spunem toate acestea pentru faptul că are sens să acordăm atenție contextului și să distingem situațiile când vorbim despre poziția de cod a unui caracter abstract Unicode și când vorbim despre reprezentarea lui octet.

In cele din urma

Există atât de multe aspecte diferite ale Unicode, încât este imposibil să acoperiți totul într-un singur articol. Și este inutil. Informațiile de mai sus sunt suficiente pentru a evita confuzia în principiile de bază și pentru a lucra cu text în majoritatea sarcinilor de zi cu zi (citiți: fără a depăși BMP). În următoarele articole vom vorbi despre normalizare, vom oferi o imagine de ansamblu istorică mai completă a dezvoltării codificărilor, vom vorbi despre problemele terminologiei Unicode în limba rusă și vom face, de asemenea, materiale despre aspectele practice ale utilizării UTF-8 și UTF-16. .

Deoarece într-un număr de sisteme informatice (de exemplu, Windows NT) caracterele fixe pe 16 biți erau deja folosite ca codificare implicită, s-a decis să se codifice toate caracterele cele mai importante doar în primele 65.536 de poziții (așa-numitele engleze. avion multilingv de bază, BMP). Restul spațiului este folosit pentru „caracterele suplimentare”. caractere suplimentare): sisteme de scriere a limbilor dispărute sau foarte rar utilizate caractere chinezești, simboluri matematice și muzicale.

Pentru compatibilitate cu sisteme mai vechi pe 16 biți, a fost inventat sistemul UTF-16, unde primele 65.536 de poziții, excluzând pozițiile din intervalul U+D800...U+DFFF, sunt reprezentate direct ca numere pe 16 biți, iar restul sunt reprezentate ca „perechi surogat” „(primul element al perechii din zona U+D800...U+DBFF, al doilea element al perechii din zona U+DC00...U+DFFF). Pentru perechile surogat, a fost folosită o parte din spațiul de cod (2048 de poziții) rezervat anterior pentru „personaje pentru uz privat”.

Deoarece UTF-16 poate afișa doar 2 20 + 2 16 −2048 (1 112 064) caractere, acest număr a fost ales ca valoare finală a spațiului de cod Unicode.

Deși zona de cod Unicode a fost extinsă dincolo de 2 16 încă din versiunea 2.0, primele caractere din zona „de sus” nu au fost plasate până în versiunea 3.1.

Rolul acestei codificări în sectorul web este în continuă creștere; la începutul anului 2010, ponderea site-urilor web care foloseau Unicode era de aproximativ 50%.

versiuni Unicode

Pe măsură ce tabelul de caractere al sistemului Unicode se modifică și este completat și sunt lansate noi versiuni ale acestui sistem - și această lucrare este în desfășurare, deoarece inițial sistemul Unicode includea doar Planul 0 - coduri pe dublu octet - sunt lansate și noi documente ISO. Sistemul Unicode există în total din următoarele versiuni:

  • 1.1 (corespunde cu ISO/IEC 10646-1:), standard 1991-1995.
  • 2.0, 2.1 (același standard ISO/IEC 10646-1:1993 plus completări: „Amendamentele” 1 la 7 și „Corrigenda tehnice” 1 și 2), standard 1996.
  • 3.0 (standard ISO/IEC 10646-1:2000), standard 2000.
  • 3.1 (standarde ISO/IEC 10646-1:2000 și ISO/IEC 10646-2:2001), standard 2001.
  • 3.2, standardul 2002.
  • 4.0, standard.
  • 4.01, standard.
  • 4.1, standard.
  • 5.0, standard.
  • 5.1, standard.
  • 5.2, standard.
  • 6.0, standard.
  • 6.1, standard.
  • 6.2, standard.

Spațiu cod

Deși notațiile UTF-8 și UTF-32 permit codificarea a până la 2,31 (2,147,483,648) poziții de cod, s-a decis să se utilizeze doar 1,112,064 pentru compatibilitate cu UTF-16. Cu toate acestea, chiar și acest lucru este mai mult decât suficient - astăzi (în versiunea 6.0) sunt folosite puțin sub 110.000 de poziții de cod (109.242 de simboluri grafice și 273 de alte simboluri).

Spațiul de cod este împărțit în 17 avioane 2 16 (65536) caractere fiecare. Planul de sol se numește de bază, conține simboluri ale celor mai frecvent utilizate scripturi. Primul plan este folosit în principal pentru scrierile istorice, al doilea pentru caracterele KKY rar folosite, al treilea este rezervat caracterelor chinezești arhaice. Avioanele 15 și 16 sunt alocate pentru uz privat.

Pentru a desemna caracterele Unicode, se folosește o notație precum „U+”. xxxx„(pentru codurile 0...FFFF) sau „U+ xxxxx„(pentru codurile 10000...FFFFF) sau „U+ xxxxxx„(pentru codurile 100000...10FFFF), unde xxx- cifre hexazecimale. De exemplu, caracterul „I” (U+044F) are codul 044F = 1103.

Sistem de codare

Sistemul universal de codare (Unicode) este un set de caractere grafice și o metodă de codificare a acestora pentru procesarea computerizată a datelor text.

Simbolurile grafice sunt simboluri care au o imagine vizibilă. Caracterele grafice sunt în contrast cu caracterele de control și caracterele de formatare.

Simbolurile grafice includ următoarele grupuri:

  • litere conținute în cel puțin unul dintre alfabetele acceptate;
  • numere;
  • semne de punctuatie;
  • semne speciale (matematice, tehnice, ideograme etc.);
  • separatoare.

Unicode este un sistem de reprezentare liniară a textului. Caracterele care au elemente suplimentare de indice sau indice pot fi reprezentate ca o succesiune de coduri construite dupa anumite reguli (caracter compus) sau ca un singur caracter (varianta monolitica, caracter precompus).

Modificarea caracterelor

Reprezentarea simbolului „И” (U+0419) ca caracter de bază „И” (U+0418) și caracterul modificator „ ̆” (U+0306)

Caracterele grafice în Unicode sunt împărțite în extinse și neextinse (fără lățime). Caracterele neextinse nu ocupă spațiu în rând când sunt afișate. Acestea includ, în special, semnele de accent și alte semne diacritice. Atât simbolurile extinse, cât și cele neextinse au propriile lor coduri. Simbolurile extinse sunt altfel numite simboluri de bază. caractere de bază), și neextins - modificare (ing. combinând personaje); Mai mult, acesta din urmă nu se poate întâlni independent. De exemplu, caracterul „á” poate fi reprezentat ca o secvență a caracterului de bază „a” (U+0061) și a caracterului modificator „́” (U+0301), sau ca un caracter monolitic „á” (U+ 00C1).

Un tip special de caractere de modificare sunt selectoarele de variante de stil. selectoare de variație). Acestea afectează doar acele simboluri pentru care sunt definite astfel de variante. În versiunea 5.0, variantele de stil sunt definite pentru un număr de simboluri matematice, pentru simbolurile alfabetului tradițional mongol și pentru simbolurile din scrierea pătrată mongolă.

Forme de normalizare

Deoarece aceleași caractere pot fi reprezentate prin coduri diferite, ceea ce îngreunează uneori procesarea, există procese de normalizare menite să reducă textul la o anumită formă standard.

Standardul Unicode definește 4 forme de normalizare a textului:

  • Forma de normalizare D (NFD) este descompunerea canonică. În procesul de aducere a textului în această formă, toate caracterele compuse sunt înlocuite recursiv cu mai multe compuse, în conformitate cu tabelele de descompunere.
  • Forma de normalizare a lui C (NFC) este descompunerea canonică urmată de compoziția canonică. În primul rând, textul este redus la forma D, după care se efectuează o compunere canonică - textul este procesat de la început până la sfârșit și se respectă următoarele reguli:
    • Simbolul S este iniţială, dacă are clasa de modificare zero în baza de caractere Unicode.
    • În orice succesiune de caractere care încep cu caracterul inițial S, caracterul C este blocat din S dacă și numai dacă între S și C există orice caracter B care este fie caracterul inițial, fie are aceeași clasă de modificare sau mai mare decât C. Acest este regula se aplică numai șirurilor care au suferit descompunere canonică.
    • Primar Un compus este un caracter care are o descompunere canonică în baza caracterelor Unicode (sau o descompunere canonică pentru Hangul și nu este inclus în lista de excepții).
    • Un caracter X poate fi compus primar cu un caracter Y dacă și numai dacă există un compus primar Z care este echivalent canonic cu secvența .
    • Dacă următorul simbol C nu este blocat de ultimul simbol de bază inițial întâlnit L și poate fi combinat cu succes primar cu acesta, atunci L este înlocuit cu compusul L-C și C este eliminat.
  • Forma de normalizare KD (NFKD) este o descompunere compatibilă. Când sunt prezentate în această formă, toate caracterele constitutive sunt înlocuite folosind atât hărți de descompunere Unicode canonice, cât și hărți de descompunere compatibile, iar rezultatul este apoi pus în ordine canonică.
  • Forma de normalizare KC (NFKC) - descompunere compatibilă urmată de canonic compoziţie.

Termenii „compunere” și „descompunere” înseamnă, respectiv, legătura sau descompunerea simbolurilor în părțile lor componente.

Exemple

Text original NFD NFC NFKD NFKC
Franceză Franc\u0327ais Fran\xe7ais Franc\u0327ais Fran\xe7ais
A, E, J \u0410, \u0401, \u0419 \u0410, \u0415\u0308, \u0418\u0306 \u0410, \u0401, \u0419
\u304b\u3099 \u304c \u304b\u3099 \u304c
Henric al IV-lea Henric al IV-lea Henric al IV-lea Henric al IV-lea Henric al IV-lea
Henry Ⅳ Henry\u2163 Henry\u2163 Henric al IV-lea Henric al IV-lea

Scriere bidirecțională

Standardul Unicode acceptă limbi scrise în ambele direcții de scriere de la stânga la dreapta. de la stânga la dreapta, LTR), și cu scriere de la dreapta la stânga (engleză. de la dreapta la stânga, RTL) - de exemplu, scrierea arabă și ebraică. În ambele cazuri, caracterele sunt stocate într-o ordine „naturală”; afișarea acestora ținând cont de direcția de scriere dorită este asigurată de aplicație.

În plus, Unicode acceptă texte combinate care combină fragmente cu direcții de scriere diferite. Această caracteristică este numită bidirecţionalitate(Engleză) text bidirecțional, BiDi). Unele dispozitive de redare a textului ușoare (cum ar fi cele din telefoanele mobile) pot accepta Unicode, dar nu acceptă bidirecționalitate. Toate caracterele Unicode sunt împărțite în mai multe categorii: cele scrise de la stânga la dreapta, cele scrise de la dreapta la stânga și cele scrise în orice direcție. Ultima categorie de caractere (mai ales semne de punctuație) iau direcția textului din jur când este afișată.

Personaje prezentate

Unicode include practic toate scripturile moderne, inclusiv:

si altii.

Au fost adăugate multe scripturi istorice în scopuri academice, printre care: rune, greacă veche, hieroglife egiptene, cuneiforme, scriere mayașă, alfabet etrusc.

Unicode oferă o gamă largă de simboluri și pictograme matematice și muzicale.

Cu toate acestea, Unicode, în general, nu include siglele companiei și ale produselor, deși acestea apar în fonturi (de exemplu, sigla Apple în MacRoman (0xF0) sau sigla Windows în Wingdings (0xFF)). În fonturile Unicode, siglele ar trebui să fie plasate numai în zona de caractere personalizată.

ISO/IEC 10646

Consorțiul Unicode lucrează îndeaproape cu grupul de lucru ISO/IEC/JTC1/SC2/WG2 care dezvoltă Standardul Internațional 10646 (ISO/IEC 10646). Există o sincronizare între standardul Unicode și ISO/IEC 10646, deși fiecare standard folosește propria terminologie și sistem de documentare.

Colaborare între Consorțiul Unicode și Organizația Internațională pentru Standardizare. Organizația Internațională pentru Standardizare, ISO ) a început în 1991. În 1993, ISO a lansat standardul DIS 10646.1. Pentru a se sincroniza cu acesta, Consorțiul a aprobat versiunea standard Unicode 1.1, care includea caractere suplimentare din DIS 10646.1. Ca urmare, semnificațiile caracterelor codificate în Unicode 1.1 și DIS 10646.1 au coincis complet.

Ulterior, cooperarea dintre cele două organizații a continuat. În 2000, standardul Unicode 3.0 a fost sincronizat cu ISO/IEC 10646-1:2000. A treia versiune viitoare a ISO/IEC 10646 va fi sincronizată cu Unicode 4.0. Poate că aceste specificații vor fi chiar publicate ca standard unic.

Similar cu formatele UTF-16 și UTF-32 din standardul Unicode, standardul ISO/IEC 10646 are, de asemenea, două forme de bază de codificare a caracterelor: UCS-2 (2 octeți per caracter, similar cu UTF-16) și UCS-4 (4 octeți per caracter, similar cu UTF-32). UCS înseamnă multi-octet universal(multi-octeți) set de caractere codificate(Engleză) set universal de caractere codificate cu mai multe octete ). UCS-2 poate fi considerat un subset al UTF-16 (UTF-16 fără perechi surogat), iar UCS-4 este un sinonim pentru UTF-32.

Metode de prezentare

Unicode are mai multe forme de reprezentare. Format de transformare Unicode, UTF ): UTF-8, UTF-16 (UTF-16BE, UTF-16LE) și UTF-32 (UTF-32BE, UTF-32LE). A fost dezvoltată și o formă de reprezentare UTF-7 pentru transmisia pe canale pe șapte biți, dar din cauza incompatibilității cu ASCII nu a fost utilizată pe scară largă și nu este inclusă în standard. La 1 aprilie 2005, au fost propuse două forme de reprezentare umoristică: UTF-9 și UTF-18 (RFC 4042).

Unicode UTF-8: 0x00000000 - 0x0000007F: 0xxxxxxx 0x00000080 - 0x000007FF: 110xxxx 10xxxxxx 0x00000800 - 0x0000FFFF 0x00000080 - 0x000007FF: 110xxxx 10xxxxxx 0x00000800 - 0x0000FFFF: 1100000800 - 0x0000FFFF: 110 xxxx0 xxxx0 xxxx0 xxxx0 xxxx0 xxxx 001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Teoretic posibil, dar și neinclus în standard:

0x00200000 - 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 0x04000000 - 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxx 10xxxxxx

Deși UTF-8 vă permite să specificați același caracter în mai multe moduri, doar cel mai scurt este corect. Alte formulare ar trebui respinse din motive de securitate.

Ordinea octetilor

Într-un flux de date UTF-16, octetul înalt poate fi scris fie înainte de octetul scăzut. UTF-16 big-endian), sau după cel mai mic (engleză) UTF-16 little-endian). În mod similar, există două opțiuni pentru codificarea pe patru octeți - UTF-32BE și UTF-32LE.

Pentru a determina formatul de reprezentare Unicode, la începutul fișierului text este scrisă o semnătură - caracterul U+FEFF (spațiu fără lățime zero), numit și marca de ordine a octetilor(Engleză) marca de ordine a octetilor, BOM ). Acest lucru face posibilă diferențierea între UTF-16LE și UTF-16BE, deoarece caracterul U+FFFE nu există. Această metodă este uneori folosită și pentru a desemna formatul UTF-8, deși conceptul de ordine a octeților nu este aplicabil acestui format. Fișierele care urmează această convenție încep cu următoarele secvențe de octeți:

UTF-8 EF BB BF UTF-16BE FE FF UTF-16LE FF FE UTF-32BE 00 00 FE FF UTF-32LE FF FE 00 00

Din păcate, această metodă nu distinge în mod fiabil între UTF-16LE și UTF-32LE, deoarece caracterul U+0000 este permis de Unicode (deși textul real începe rar cu el).

Fișierele codificate UTF-16 și UTF-32 care nu conțin un BOM trebuie să fie în ordinea octeților big-endian (unicode.org).

Unicode și codificări tradiționale

Introducerea Unicode a condus la o schimbare în abordarea codificărilor tradiționale pe 8 biți. Dacă mai devreme codificarea era specificată de font, acum este specificată printr-un tabel de corespondență între codificarea dată și Unicode. De fapt, codificările pe 8 biți au devenit o formă de reprezentare pentru un subset de Unicode. Acest lucru a făcut mult mai ușoară crearea de programe care trebuie să funcționeze cu multe codificări diferite: acum, pentru a adăuga suport pentru o altă codificare, trebuie doar să adăugați un alt tabel de conversie Unicode.

În plus, multe formate de date vă permit să introduceți orice caractere Unicode, chiar dacă documentul este scris în vechea codificare de 8 biți. De exemplu, în HTML puteți utiliza coduri cu ampersand.

Implementări

Cele mai multe sisteme de operare moderne oferă un anumit grad de suport Unicode.

Una dintre primele implementări comerciale de succes ale Unicode a fost mediul de programare Java. A abandonat fundamental reprezentarea pe 8 biți a caracterelor în favoarea celor pe 16 biți. Majoritatea limbajelor de programare acceptă acum șiruri Unicode, deși reprezentarea lor poate varia în funcție de implementare.

Metode de intrare

Consola GNU/Linux vă permite, de asemenea, să introduceți un caracter Unicode prin codul său - pentru a face acest lucru, codul zecimal al caracterului trebuie introdus folosind numerele blocului de tastatură extins în timp ce țineți apăsată tasta Alt. Puteți introduce caractere după codul lor hexazecimal: pentru a face acest lucru, trebuie să țineți apăsată tasta AltGr, iar pentru a introduce numerele A-F, utilizați tastele de blocare a tastaturii extinse de la NumLock la Enter (în sensul acelor de ceasornic). Este acceptată și intrarea în conformitate cu ISO 14755. Pentru ca metodele de mai sus să funcționeze, trebuie să activați modul Unicode în consolă apelând unicode_start (1) și selectați fontul corespunzător apelând setfont (8).

Ortografia „Unicode” a devenit deja ferm stabilită în textele în limba rusă. Potrivit Yandex, frecvența de utilizare a acestui cuvânt este de aproximativ 11 ori mai mare decât Unicode. Wikipedia folosește o versiune mai comună.

Site-ul Consorțiului are o pagină specială care discută problemele transmiterii cuvântului „Unicode” în diferite limbi și sisteme de scriere. Pentru alfabetul chirilic rus, este indicată opțiunea „Unicode”.

Formele adoptate de organizațiile străine pentru traducerea în limba rusă a cuvântului „Unicode” sunt consultative.

Vezi si

  • Proiect: Introducerea simbolurilor alfabetelor popoarelor Rusiei în Unicode

Note

  1. Trancrieri Unicode (engleză). Arhivat din original pe 22 august 2011. Consultat la 10 mai 2010.
  2. Unicode în dicționarul Paratype
  3. Standardul Unicode®: o introducere tehnică. Arhivat
  4. Istoria datelor de lansare și publicare Unicode. Arhivat din original pe 22 august 2011. Consultat la 4 iulie 2010.
  5. Consorțiul Unicode. Arhivat din original pe 22 august 2011. Consultat la 4 iulie 2010.
  6. Cuvânt înainte. Arhivat din original pe 22 august 2011. Consultat la 4 iulie 2010.
  7. Structura generală. Arhivat din original pe 22 august 2011. Consultat la 5 iulie 2010.
  8. Scripturi alfabetice europene. Arhivat din original pe 22 august 2011. Consultat la 4 iulie 2010.
  9. Unicode 88. Arhivat din original pe 22 august 2011. Consultat la 8 iulie 2010.
  10. Unicode și Microsoft Windows NT (engleză). Asistență Microsoft. Arhivat
  11. Unicode este folosit pe aproape 50% dintre site-uri web (rusă). Arhivat din original pe 22 august 2011.
  12. Foaia de parcurs către TIP (planul ideologic terțiar)
  13. http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt (engleză)
  14. Cazul Unicode nu este ușor
  15. Majoritatea fonturilor PC implementează cifre monospațiu „majuscule” (majuscule).
  16. În unele cazuri, un document (nu text simplu) în Unicode poate ocupa mult mai puțin spațiu decât un document într-o codificare pe un singur octet. De exemplu, dacă o anumită pagină web conține un număr aproximativ egal de text în rusă și greacă, atunci într-o codificare pe un singur octet va trebui să scrieți fie litere rusești, fie grecești, folosind capacitățile formatului documentului, sub formă de coduri cu un ampersand, care ocupă 6-7 octeți per caracter (când se utilizează coduri zecimale), adică, în medie, o literă va lua 3,5-4 octeți, în timp ce UTF-8 ia doar 2 octeți per literă greacă sau rusă.
  17. Unul dintre fișierele de font Arial Unicode are o dimensiune de 24 de megaocteți; Există un Times New Roman care are o dimensiune de 120 de megaocteți și conține aproape 65.536 de caractere.
  18. Chiar și pentru cel mai modern și mai scump telefon mobil este dificil să aloci 120 MB de memorie pentru un font Unicode complet. În practică, utilizarea fonturilor complete este rareori necesară.
  19. 350 de mii de pagini „Unicode” față de 31 de mii de pagini „Unicode”.

Legături

  • Site-ul oficial al consorțiului Unicode (engleză)
  • Unicodeîn directorul de linkuri Open Directory Project (dmoz). (Engleză)
  • Ce este Unicode? (Rusă)
  • Ultima versiune