Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Sa karaktere janë në tabelën unicode. Unicode në ueb: Një hyrje për fillestarët

Unicode ose Unicode (nga fjala angleze Unicode) është një standard i kodimit të karaktereve. Ai mundëson që pothuajse të gjitha gjuhët e shkruara të kodohen.

Në fund të viteve 1980, roli i standardit iu caktua karaktereve 8-bit. Kodimet 8-bit u përfaqësuan nga modifikime të ndryshme, numri i të cilave po rritej vazhdimisht. Kjo ishte kryesisht rezultat i një zgjerimi aktiv të gamës së gjuhëve të përdorura. Kishte gjithashtu një dëshirë të zhvilluesve për të dalë me një kodim që pretendon të paktën universalitet të pjesshëm.

Si rezultat, u bë e nevojshme të merreni me disa probleme:

  • probleme me shfaqjen e dokumenteve në kodim të pasaktë. Mund të zgjidhet ose duke futur vazhdimisht metoda për specifikimin e kodimit të përdorur, ose duke futur një kodim të vetëm për të gjithë;
  • problemet e kufizimeve të paketës së karaktereve, të zgjidhura ose duke ndërruar fontet në dokument, ose duke futur një kodim të zgjeruar;
  • problemet e transformimit të kodimit nga njëri në tjetrin, të cilat dukej e mundur të zgjidheshin ose duke përdorur një transformim të ndërmjetëm (kodimi i tretë), duke përfshirë karaktere të kodimeve të ndryshme, ose duke përpiluar tabela konvertimi për secilin dy kodime;
  • problemet e dyfishimit të shkronjave individuale. Tradicionalisht, çdo kodim supozohej të kishte fontin e vet, edhe kur kodimet përputheshin plotësisht ose pjesërisht në grupin e karaktereve. Në një farë mase, problemi u zgjidh me ndihmën e shkronjave "të mëdha", nga të cilat më pas u zgjodhën karakteret e nevojshme për një kodim të caktuar. Por për të përcaktuar shkallën e përputhshmërisë, ishte e nevojshme të krijohej një regjistër i vetëm simbolesh.

Kështu, çështja e nevojës për të krijuar një kodim "të gjerë" të unifikuar ishte në rendin e ditës. Kodimet me gjatësi të ndryshueshme të karaktereve të përdorura në Azinë Juglindore dukeshin shumë të vështira për t'u zbatuar. Prandaj, theksi u vu në përdorimin e një karakteri që ka një gjerësi fikse. Karakteret 32-bitësh dukeshin shumë të rëndë dhe ato 16-bit fituan në fund.

Standardi iu propozua komunitetit të internetit në 1991 nga një organizatë jofitimprurëse "Konsorciumi Unicode". Përdorimi i tij bën të mundur kodimin e një numri të madh karakteresh të llojeve të ndryshme të shkrimit. Në dokumentet e Unicode, as karakteret kineze, as simbolet matematikore, as cirilikët, as latinishtja nuk janë afër në afërsi. Në të njëjtën kohë, faqet e kodit nuk kërkojnë ndonjë ndërrim gjatë funksionimit.

Standardi përbëhet nga dy seksione kryesore: grupi universal i karaktereve (UCS anglisht) dhe familja e kodimeve (në interpretimin anglisht - UTF). Kompleti universal i karaktereve përcakton një proporcionalitet të paqartë me kodet e karaktereve. Kodet në këtë rast janë elementë të sferës së kodit, të cilët janë numra të plotë jo negativë. Funksioni i një familje kodimi është të përcaktojë paraqitjen e makinës të një sekuence kodesh UCS.

Në standardin Unicode, kodet vlerësohen në disa fusha. Zona me kode që fillojnë me U+0000 dhe mbarojnë me U+007F - përfshin karakteret e grupit ASCII me kodet e kërkuara. Më tej ka zona simbolesh të shkrimeve të ndryshme, simbole teknike, shenja pikësimi. Një grup i veçantë kodesh mbahet në rezervë për përdorim në të ardhmen. Zonat e mëposhtme të karaktereve me kode janë përcaktuar për cirilikën: U+0400 - U+052F, U+2DE0 - U+2DFF, U+A640 - U+A69F.

Vlera e këtij kodimi në hapësirën e internetit po rritet në mënyrë të pashmangshme. Pjesa e faqeve që përdorin Unicode ishte pothuajse 50 përqind në fillim të 2010.

Sot do të flasim me ju se nga vijnë krakozyabrs në faqe dhe në programe, cilat kodime teksti ekzistojnë dhe cilat duhet të përdoren. Le të hedhim një vështrim më të afërt në historinë e zhvillimit të tyre, duke filluar nga ASCII bazë, si dhe versionet e tij të zgjeruara CP866, KOI8-R, Windows 1251 dhe duke përfunduar me kodimet moderne të Unicode Consortium UTF 16 dhe 8. Përmbajtja:

  • Versione të zgjeruara të kodimeve Asuka - CP866 dhe KOI8-R
  • Windows 1251 - një variant i ASCII dhe pse shfaqen gabime
Për disa, ky informacion mund të duket i tepërt, por ju do të dini se sa pyetje kam në mënyrë specifike në lidhje me krakozyabrs të zvarritura (një grup karakteresh të palexueshëm). Tani do të kem mundësinë t'i referoj të gjithë në tekstin e këtij artikulli dhe të kërkoj në mënyrë të pavarur bllokimet e mia. Epo, përgatituni të përthithni informacionin dhe përpiquni të ndiqni rrjedhën e tregimit.

ASCII - kodimi bazë i tekstit për latinishten

Zhvillimi i kodimeve të tekstit ndodhi njëkohësisht me formimin e industrisë së IT, dhe gjatë kësaj kohe ata arritën të pësojnë mjaft ndryshime. Historikisht, gjithçka filloi me EBCDIC, i cili ishte mjaft disonant në shqiptimin rus, gjë që bëri të mundur kodimin e shkronjave të alfabetit latin, numrave arabë dhe shenjave të pikësimit me karaktere kontrolli. Por megjithatë, pika fillestare për zhvillimin e kodimeve moderne të tekstit duhet të konsiderohet e famshme ASCII(Kodi standard amerikan për shkëmbimin e informacionit, i cili në rusisht zakonisht shqiptohet si "aski"). Ai përshkruan 128 karakteret e para më të përdorura nga përdoruesit anglishtfolës - shkronja latine, numra arabë dhe shenja pikësimi. Edhe në këto 128 karaktere të përshkruara në ASCII, kishte disa karaktere shërbimi si kllapa, shirita, yll, etj. Në fakt, ju mund t'i shihni ato vetë:
Janë këta 128 karaktere nga versioni origjinal i ASCII që janë bërë standard dhe në çdo kodim tjetër do t'i takoni patjetër dhe do të qëndrojnë në atë renditje. Por fakti është se me ndihmën e një bajt informacioni, është e mundur të kodohen jo 128, por deri në 256 vlera të ndryshme (dy në fuqinë e tetë është e barabartë me 256), kështu që pas versionit bazë të Asuka, një seri e tërë e kodime të zgjeruara ASCII, në të cilën, përveç 128 karaktereve bazë, ishte gjithashtu e mundur të kodoheshin simbole të kodimit kombëtar (për shembull, rusisht). Këtu, me siguri, ia vlen të thuhet pak më shumë për sistemet e numrave që përdoren në përshkrim. Së pari, siç e dini të gjithë, një kompjuter punon vetëm me numra në sistemin binar, përkatësisht me zero dhe njëshe ("algjebra Boolean", nëse dikush ka studiuar në një institut ose në shkollë). Një bajt përbëhet nga tetë bit, secili prej të cilëve është dy në fuqinë e dy, duke filluar nga zero, dhe deri në dy në të shtatën:
Nuk është e vështirë të kuptohet se mund të ketë vetëm 256 nga të gjitha kombinimet e mundshme të zeros dhe njëshit në një ndërtim të tillë.Të shndërrosh një numër nga binar në dhjetor është mjaft i thjeshtë. Ju vetëm duhet të shtoni të gjitha fuqitë e dy, mbi të cilat ka një. Në shembullin tonë, kjo është 1 (2 në fuqinë e zeros) plus 8 (dy në fuqinë e 3), plus 32 (dy në të pestën), plus 64 (në të gjashtën), plus 128 (në të shtatën) . Totali merr 233 në shënimin dhjetor. Siç mund ta shihni, gjithçka është shumë e thjeshtë. Por nëse shikoni më nga afër tabelën me karaktere ASCII, do të shihni se ato përfaqësohen në kodim heksadecimal. Për shembull, "ylli" korrespondon në Asci me numrin heksadecimal 2A. Ju ndoshta e dini se përveç numrave arabë, sistemi heksadecimal i numrave përdor edhe shkronja latine nga A (që do të thotë dhjetë) në F (që do të thotë pesëmbëdhjetë). Epo, për konverton binar në heksadecimal përdorni metodën e mëposhtme të thjeshtë dhe vizuale. Çdo bajt informacioni është i ndarë në dy pjesë me katër bit, siç tregohet në pamjen e mësipërme të ekranit. Se. në çdo gjysmë bajt, vetëm gjashtëmbëdhjetë vlera mund të kodohen në kodin binar (dy deri në fuqinë e katërt), i cili mund të përfaqësohet lehtësisht si një numër heksadecimal. Për më tepër, në gjysmën e majtë të bajtit, do të jetë e nevojshme të numëroni përsëri shkallët, duke filluar nga zero, dhe jo siç tregohet në pamjen e ekranit. Si rezultat, me llogaritje të thjeshta, marrim se numri E9 është i koduar në pamjen e ekranit. Shpresoj që rrjedha e arsyetimit tim dhe zgjidhja e kësaj enigme doli të jetë e qartë për ju. Epo, tani le të vazhdojmë, në fakt, të flasim për kodimet e tekstit.

Versione të zgjeruara të kodimeve Asuka - CP866 dhe KOI8-R me pseudografikë

Pra, filluam të flasim për ASCII, i cili ishte, si të thuash, pika fillestare për zhvillimin e të gjitha kodimeve moderne (Windows 1251, Unicode, UTF 8). Fillimisht, ai përmbante vetëm 128 karaktere të alfabetit latin, numra arabë dhe diçka tjetër, por në versionin e zgjeruar u bë e mundur të përdoren të gjitha 256 vlerat që mund të kodohen në një bajt informacioni. ato. u bë e mundur të shtoni karaktere të shkronjave të gjuhës suaj në Asci. Këtu do të jetë e nevojshme të largohemi përsëri për të shpjeguar - pse keni nevojë fare për kodime teksti dhe pse është kaq e rëndësishme. Simbolet në ekranin e kompjuterit tuaj formohen në bazë të dy gjërave - grupe formash vektoriale (përfaqësime) të të gjitha llojeve të karaktereve (ato janë në skedarë me shkronja që janë instaluar në kompjuterin tuaj) dhe një kod që ju lejon të tërhiqni saktësisht ai nga ky grup i formave vektoriale (skedari i shkronjave).karakteri që duhet të futet në vendin e duhur. Është e qartë se fontet janë përgjegjëse për vetë format e vektorit, por sistemi operativ dhe programet e përdorura në të janë përgjegjës për kodimin. ato. çdo tekst në kompjuterin tuaj do të jetë një grup bajtësh, secili prej të cilëve kodon një karakter të vetëm të këtij teksti. Programi që shfaq këtë tekst në ekran (redaktori i tekstit, shfletuesi, etj.), kur analizon kodin, lexon kodimin e karakterit tjetër dhe kërkon formën përkatëse vektoriale në skedarin e fontit të dëshiruar që është i lidhur për të shfaqur këtë tekst. dokument. Gjithçka është e thjeshtë dhe banale. Kjo do të thotë që për të koduar çdo karakter që na nevojitet (për shembull, nga alfabeti kombëtar), duhet të plotësohen dy kushte - forma vektoriale e këtij karakteri duhet të jetë në fontin e përdorur dhe ky karakter mund të kodohet në kodime të zgjeruara ASCII në një bajt. Prandaj, ka një grup të tërë opsionesh të tilla. Vetëm për kodimin e karaktereve të gjuhës ruse, ekzistojnë disa lloje të Aska të zgjeruar. Për shembull, fillimisht ka pasur CP866, në të cilën ishte e mundur të përdoreshin karakteret e alfabetit rus dhe ishte një version i zgjeruar i ASCII. ato. pjesa e sipërme e saj përkoi plotësisht me versionin bazë të Asuka (128 karaktere latine, numra dhe çdo gjë tjetër), e cila tregohet në pamjen e ekranit pak më lart, por pjesa e poshtme e tabelës me kodimin CP866 kishte formën e treguar në pamjen e ekranit. më poshtë dhe lejohet të kodojë 128 shenja të tjera (shkronjat ruse dhe të gjitha llojet e pseudografisë atje):
Shihni, në kolonën e djathtë, numrat fillojnë me 8, sepse numrat nga 0 në 7 i referohen pjesës bazë ASCII (shih pamjen e parë të ekranit). Se. shkronja ruse "M" në CP866 do të ketë kodin 9C (ai ndodhet në kryqëzimin e rreshtit përkatës me 9 dhe kolonës me numrin C në sistemin e numrave heksadecimal), i cili mund të shkruhet në një bajt informacioni , dhe nëse ka një font të përshtatshëm me karaktere ruse, kjo letër pa probleme do të shfaqet në tekst. Nga ka ardhur kjo shumë? pseudografia në CP866? Gjë është se ky kodim për tekstin rus u zhvillua në ato vite me gëzof, kur nuk kishte një shpërndarje të tillë të sistemeve operative grafike siç është tani. Dhe në Dosa, dhe sisteme të ngjashme operative të tekstit, pseudo-grafika bëri të mundur që disi të diversifikohej dizajni i teksteve, dhe për këtë arsye ai ka bollëk në CP866 dhe të gjithë bashkëmoshatarët e tij nga kategoria e versioneve të zgjeruara të Asuka. CP866 u shpërnda nga IBM, por përveç kësaj, u zhvilluan një numër kodimesh për karakteret ruse, për shembull, i njëjti lloj (ASCII i zgjeruar) mund t'i atribuohet KOI8-R:
Parimi i funksionimit të tij mbetet i njëjtë me atë të CP866 të përshkruar pak më herët - çdo karakter i tekstit është i koduar nga një bajt i vetëm. Pamja e ekranit tregon gjysmën e dytë të tabelës KOI8-R, sepse gjysma e parë korrespondon plotësisht me Asuka bazë, e cila tregohet në pamjen e parë të ekranit në këtë artikull. Ndër veçoritë e kodimit KOI8-R, mund të vërehet se shkronjat ruse në tabelën e tij nuk janë sipas rendit alfabetik, siç është bërë, për shembull, në CP866. Nëse shikoni pamjen e parë të ekranit (të pjesës bazë, e cila përfshihet në të gjitha kodimet e zgjeruara), do të vini re se në KOI8-R shkronjat ruse janë të vendosura në të njëjtat qeliza të tabelës si shkronjat e bashkëtingëllores së alfabetit latin. me ta nga pjesa e parë e tabelës. Kjo u bë për lehtësinë e kalimit nga karakteret ruse në latine duke hedhur vetëm një bit (dy në fuqinë e shtatë ose 128).

Windows 1251 - versioni modern i ASCII dhe pse krakozyabry zvarritet jashtë

Zhvillimi i mëtejshëm i kodimeve të tekstit ishte për shkak të faktit se sistemet operative grafike po fitonin popullaritet dhe nevoja për të përdorur pseudografinë në to përfundimisht u zhduk. Si rezultat, u ngrit një grup i tërë, të cilët, në thelb, ishin ende versione të zgjeruara të Asuka (një karakter i tekstit është i koduar me vetëm një bajt informacioni), por pa përdorimin e karaktereve pseudografike. Ato i përkisnin të ashtuquajturave kodime ANSI, të cilat u zhvilluan nga Instituti Amerikan i Standardeve. Në gjuhën e zakonshme, emri cirilik u përdor gjithashtu për variantin me mbështetje për gjuhën ruse. Një shembull i tillë mund të jetë Windows 1251. Ai ndryshonte në mënyrë të favorshme nga CP866 dhe KOI8-R të përdorura më parë në atë që vendin e simboleve pseudografike në të e zunë simbolet që mungonin të tipografisë ruse (përveç shenjës së theksit), si dhe simbolet e përdorura në gjuhët sllave afër Rusisht (ukrainas, bjellorusisht, etj.). ):
Për shkak të një bollëk të tillë të kodimeve në gjuhën ruse, prodhuesit e shkronjave dhe prodhuesit e softuerëve vazhdimisht kishin një dhimbje koke, dhe ne, të dashur lexues, shpesh dilnim nga ajo shumë famëkeqe krakozyabry kur pati ngatërrim me versionin e përdorur në tekst. Shumë shpesh ata dilnin kur dërgonin dhe merrnin mesazhe me postë elektronike, gjë që çoi në krijimin e tabelave shumë komplekse të konvertimit, të cilat, në fakt, nuk mund ta zgjidhnin këtë problem në rrënjë, dhe shpesh përdoruesit përdornin transliterimin e shkronjave latine për korrespondencë. për të shmangur krakozyabry famëkeqe kur përdorni kodime ruse si CP866, KOI8-R ose Windows 1251. Në fakt, gabimet që u shfaqën në vend të tekstit rus ishin rezultat i përdorimit të gabuar të kodimit të kësaj gjuhe, i cili nuk përputhej ai në të cilin mesazhi me tekst ishte koduar fillimisht. Për shembull, nëse përpiqeni të shfaqni karakteret e koduara duke përdorur CP866 duke përdorur tabelën e kodit të Windows 1251, atëherë do të dalin të njëjtat krakozyabry (grup karakteresh pa kuptim), duke zëvendësuar plotësisht tekstin e mesazhit. Një situatë e ngjashme ndodh shumë shpesh gjatë krijimit dhe konfigurimit të faqeve të internetit, forumeve ose blogjeve, kur teksti me karaktere ruse ruhet gabimisht në kodimin e gabuar që përdoret në sit si parazgjedhje, ose në redaktuesin e gabuar të tekstit që shton gag të padukshëm në kod me sy të lirë. Në fund, shumë njerëz u lodhën nga një situatë e tillë me shumë kodime dhe duke dalë vazhdimisht nga krakozyabry, kishte parakushte për të krijuar një variant të ri universal që do të zëvendësonte të gjitha ato ekzistuese dhe më në fund do të zgjidhte problemin me shfaqjen e teksteve të palexueshme. . Përveç kësaj, ekzistonte problemi i gjuhëve si kinezishtja, ku karakteret e gjuhës ishin shumë më tepër se 256.

Unicode (Unicode) - kodime universale UTF 8, 16 dhe 32

Këto mijëra karaktere të grupit të gjuhëve të Azisë Juglindore nuk mund të përshkruheshin në asnjë mënyrë në një bajt informacioni, i cili u nda për kodimin e karaktereve në versionet e zgjeruara të ASCII. Si rezultat, një konsorcium thirri Unicode(Unicode - Unicode Consortium) me bashkëpunimin e shumë drejtuesve të industrisë së IT (ata që prodhojnë softuer, që kodojnë harduerin, që krijojnë fontet) të cilët ishin të interesuar për shfaqjen e një kodimi universal të tekstit. Variacioni i parë që u lëshua nën kujdesin e Konsorciumit Unicode ishte UTF-32. Numri në emrin e kodimit nënkupton numrin e biteve që përdoret për të koduar një karakter. 32 bit janë 4 bajtë informacion që do të nevojiten për të koduar një karakter të vetëm në kodimin e ri universal UTF. Si rezultat, i njëjti skedar me tekst, i koduar në versionin e zgjeruar të ASCII dhe në UTF-32, në rastin e fundit do të ketë një madhësi (peshë) katër herë më të madhe. Kjo është e keqe, por tani kemi mundësinë të kodojmë duke përdorur UTF numrin e karaktereve të barabartë me dy me fuqinë tridhjetë e dytë ( miliarda personazhe, e cila do të mbulojë çdo vlerë vërtet të nevojshme me një diferencë të madhe). Por për shumë vende me gjuhë të grupit evropian, nuk kishte nevojë të përdorni një numër kaq të madh karakteresh në kodim, megjithatë, kur përdorni UTF-32, ata do të merrnin një rritje katërfish në peshën e tekstit dokumente për asgjë, dhe si rezultat, një rritje në vëllimin e trafikut të Internetit dhe vëllimit të të dhënave të ruajtura. Kjo është shumë, dhe askush nuk mund të përballonte mbeturina të tilla. Si rezultat i zhvillimit të Unicode, UTF-16, i cili doli të ishte aq i suksesshëm sa u pranua si hapësira bazë e paracaktuar për të gjithë karakteret që përdorim. Ai përdor dy bajt për të koduar një karakter. Le të shohim se si duket kjo gjë. Në sistemin operativ Windows, mund të shkoni përgjatë rrugës "Fillimi" - "Programet" - "Aksesorët" - "Shërbimet" - "Tabela e Karaktereve". Si rezultat, do të hapet një tabelë me forma vektoriale të të gjitha shkronjave të instaluara në sistemin tuaj. Nëse zgjidhni grupin e karaktereve Unicode në "Opsionet e Avancuara", mund të shihni për secilin font individualisht të gjithë gamën e karaktereve të përfshira në të. Nga rruga, duke klikuar në ndonjë prej tyre, mund të shihni dy bajtin e tij kodi në formatin UTF-16, i përbërë nga katër shifra heksadecimal: Sa karaktere mund të kodohen në UTF-16 duke përdorur 16 bit? 65536 (dy në fuqinë e gjashtëmbëdhjetë), dhe ishte ky numër që u miratua si hapësira bazë në Unicode. Përveç kësaj, ka mënyra për të koduar me të rreth dy milionë karaktere, por të kufizuara në një hapësirë ​​të zgjeruar prej një milion karakteresh teksti. Por edhe ky version i suksesshëm i kodimit Unicode nuk u solli shumë kënaqësi atyre që shkruan, të themi, programe vetëm në anglisht, sepse pas kalimit nga versioni i zgjeruar i ASCII në UTF-16, pesha e dokumenteve u dyfishua (një bajt për një karakter në Asci dhe dy bajt për të njëjtin karakter në UTF-16). Kjo është ajo për kënaqësinë e të gjithëve dhe gjithçkaje në Konsorciumin Unicode u vendos të dalë me një kodim gjatësi të ndryshueshme. Quhet UTF-8. Pavarësisht nga tetë në emër, ai me të vërtetë ka një gjatësi të ndryshueshme, d.m.th. çdo karakter teksti mund të kodohet në një sekuencë prej një deri në gjashtë bajt. Në praktikë, në UTF-8, përdoret vetëm diapazoni nga një deri në katër bajt, sepse pas katër bajteve të kodit, asgjë nuk është as teorikisht e mundur të imagjinohet. Të gjitha karakteret latine në të janë të koduara në një bajt, ashtu si në ASCII të mirë të vjetër. Çuditërisht, në rastin e kodimit vetëm latinisht, edhe ato programe që nuk kuptojnë Unicode do të lexojnë ende atë që është e koduar në UTF-8. ato. pjesa bazë e Asuka thjesht kaloi në këtë ide të Konsorciumit Unicode. Karakteret cirilike në UTF-8 janë të koduara në dy bajt, dhe, për shembull, karakteret gjeorgjiane në tre bajtë. Konsorciumi Unicode, pasi krijoi UTF 16 dhe 8, zgjidhi problemin kryesor - tani kemi fontet kanë një hapësirë ​​të vetme kodi. Dhe tani prodhuesit e tyre mund ta mbushin atë vetëm me forma vektoriale të karaktereve të tekstit bazuar në pikat e forta dhe aftësitë e tyre. Në "Tabela e karaktereve" më sipër, mund të shihni se shkronja të ndryshme mbështesin një numër të ndryshëm karakteresh. Disa fonte të pasura me Unicode mund të jenë shumë të mëdha. Por tani ato nuk ndryshojnë në atë që u krijuan për kodime të ndryshme, por në faktin se prodhuesi i shkronjave plotësoi ose nuk e mbushi hapësirën e vetme të kodit me një ose një formë tjetër vektoriale deri në fund.

Krakozyabry në vend të shkronjave ruse - si ta rregulloni

Le të shohim tani se si shfaqen krakozyabras në vend të tekstit, ose, me fjalë të tjera, si zgjidhet kodimi i saktë për tekstin rus. Në fakt, ai vendoset në programin në të cilin krijoni ose modifikoni të njëjtin tekst ose kod duke përdorur fragmente teksti. Për redaktimin dhe krijimin e skedarëve tekstualë, unë personalisht përdor një redaktues shumë të mirë, për mendimin tim, Html dhe PHP Notepad ++. Sidoqoftë, ai mund të nxjerrë në pah sintaksën e njëqind gjuhëve të tjera programimi dhe shënimi, dhe gjithashtu ka aftësinë të zgjerohet duke përdorur shtojca. Lexoni një përmbledhje të detajuar të këtij programi të mrekullueshëm në lidhjen më poshtë. Në menynë e sipërme të Notepad ++ ka një artikull "Encodings", ku do të keni mundësinë të konvertoni një opsion ekzistues në atë të përdorur në faqen tuaj si parazgjedhje:
Në rastin e një faqeje në Joomla 1.5 dhe më të lartë, si dhe në rastin e një blogu në WordPress, për të shmangur shfaqjen e gabimeve, zgjidhni opsionin UTF8 pa BOM. Çfarë është prefiksi BOM? Fakti është se kur u zhvillua kodimi UTF-16, për disa arsye ata vendosën t'i bashkëngjitnin një gjë të tillë si aftësia për të shkruar një kod karakteri, si në sekuencë të drejtpërdrejtë (për shembull, 0A15) dhe në të kundërt (150A) . Dhe në mënyrë që programet të kuptojnë se në cilën sekuencë për të lexuar kodet, ajo u shpik BOM(Byte Order Mark ose, me fjalë të tjera, nënshkrimi), i cili u shpreh në shtimin e tre bajteve shtesë në fillimin e dokumenteve. Në kodimin UTF-8, asnjë BOM nuk ishte parashikuar në konsorciumin Unicode, dhe për këtë arsye shtimi i një nënshkrimi (këto tre bajt shtesë më famëkeq në fillim të dokumentit) thjesht parandalon disa programe të lexojnë kodin. Prandaj, gjatë ruajtjes së skedarëve në UTF, gjithmonë duhet të zgjedhim opsionin pa BOM (pa nënshkrim). Kështu që ju përparoni mbroni veten nga zvarritja e krakozyabry. Çuditërisht, disa programe në Windows nuk dinë ta bëjnë këtë (ata nuk mund ta ruajnë tekstin në UTF-8 pa BOM), për shembull, i njëjti Notepad famëkeq i Windows. Ai e ruan dokumentin në UTF-8, por gjithsesi shton nënshkrimin (tre bajtë shtesë) në fillim të tij. Për më tepër, këto byte do të jenë gjithmonë të njëjta - lexoni kodin në sekuencë të drejtpërdrejtë. Por në serverë, për shkak të kësaj gjëje të vogël, mund të lindë një problem - krakozyabry do të dalë. Prandaj, në asnjë mënyrë mos përdorni fletoren e zakonshme të Windows për redaktimin e dokumenteve të faqes tuaj, nëse nuk dëshironi pamjen e krakozyabrov. Unë e konsideroj redaktorin e përmendur tashmë Notepad ++ si opsionin më të mirë dhe më të thjeshtë, i cili praktikisht nuk ka të meta dhe përbëhet vetëm nga avantazhe. Në Notepad++, kur zgjidhni një kodim, do të keni mundësinë të konvertoni tekstin në kodimin UCS-2, i cili në thelb është shumë afër standardit Unicode. Gjithashtu në Notepad do të mund të kodohet teksti në ANSI, d.m.th. në lidhje me gjuhën ruse, ky do të jetë Windows 1251, të cilin e kemi përshkruar pak më lart.Nga vjen ky informacion? Është shkruar në regjistrin e sistemit tuaj operativ Windows - cilin kodim të zgjidhni në rastin e ANSI, cilin të zgjidhni në rastin e OEM (për gjuhën ruse do të jetë CP866). Nëse instaloni një gjuhë tjetër të paracaktuar në kompjuterin tuaj, atëherë këto kodime do të zëvendësohen me të ngjashme nga kategoria ANSI ose OEM për të njëjtën gjuhë. Pasi ta ruani dokumentin në Notepad ++ në kodimin që ju nevojitet ose të hapni dokumentin nga faqja për modifikim, mund ta shihni emrin e tij në këndin e poshtëm të djathtë të redaktuesit: Për të shmangur krakozyabrov, përveç veprimeve të përshkruara më lart, do të jetë e dobishme të shkruani informacion në lidhje me këtë kodim në kokën e tij të kodit burimor të të gjitha faqeve të faqes në mënyrë që të mos ketë konfuzion në serverin ose hostin lokal. Në përgjithësi, në të gjitha gjuhët e shënjimit të hipertekstit përveç Html, përdoret një deklaratë e veçantë xml, e cila specifikon kodimin e tekstit.< ? xml version= "1.0" encoding= "windows-1251" ? >Para se të analizojë kodin, shfletuesi e di se cili version është duke u përdorur dhe se si saktësisht duhet të interpretohen kodet e karaktereve të asaj gjuhe. Por ajo që është e jashtëzakonshme, nëse e ruani dokumentin në unicode të paracaktuar, atëherë kjo deklaratë xml mund të hiqet (kodimi do të konsiderohet UTF-8 nëse nuk ka BOM ose UTF-16 nëse ka një BOM). Në rastin e një dokumenti të gjuhës Html, kodimi përdoret për të specifikuar Elementi meta, i cili shkruhet midis etiketës së hapjes dhe mbylljes së kokës: < head> . . . < meta charset= "utf-8" > . . . < / head>Kjo hyrje është mjaft e ndryshme nga standardi në Html 4.01, por është plotësisht në përputhje me standardin e ri Html 5 që po prezantohet ngadalë dhe do të kuptohet 100% saktë nga çdo shfletues aktualisht në përdorim. Në teori, elementi Meta me kodimin Html të dokumentit do të ishte më mirë të vendosej sa më lart që të jetë e mundur në kokën e dokumentit në mënyrë që në momentin e takimit në tekstin e karakterit të parë jo nga baza ANSI (i cili do të lexohet gjithmonë saktë dhe në çdo variacion), shfletuesi duhet të ketë tashmë informacion se si të interpretojë kodet e këtyre karaktereve. Lidhja me të parën

Unicode është një botë shumë e madhe dhe komplekse, sepse standardi ju lejon të përfaqësoni dhe të punoni në një kompjuter me të gjitha skriptet kryesore të botës. Disa sisteme shkrimi kanë ekzistuar për më shumë se një mijë vjet dhe shumë prej tyre janë zhvilluar pothuajse të pavarura nga njëri-tjetri në pjesë të ndryshme të botës. Njerëzit kanë dalë me kaq shumë gjëra dhe shpesh është aq i ndryshëm nga njëri-tjetri sa që ishte një detyrë jashtëzakonisht e vështirë dhe ambicioze për të kombinuar të gjitha këto në një standard të vetëm.

Për të kuptuar vërtet Unicode, duhet të imagjinoni të paktën sipërfaqësisht veçoritë e të gjitha skripteve me të cilat standardi ju lejon të punoni. Por a është vërtet e nevojshme për çdo zhvillues? Ne do të themi jo. Për të përdorur Unicode në shumicën e detyrave të përditshme, mjafton të kesh një minimum të arsyeshëm njohurish dhe më pas të thellohesh në standard sipas nevojës.

Në këtë artikull, ne do të flasim për parimet themelore të Unicode dhe do të theksojmë ato çështje të rëndësishme praktike me të cilat zhvilluesit me siguri do të përballen në punën e tyre të përditshme.

Pse nevojitet Unicode?

Para ardhjes së Unicode, kodimet me një bajt përdoreshin pothuajse në mënyrë universale, në të cilat kufiri midis vetë personazheve, përfaqësimi i tyre në kujtesën e kompjuterit dhe shfaqja në ekran ishte mjaft arbitrar. Nëse keni punuar me një ose një gjuhë tjetër kombëtare, atëherë në sistemin tuaj janë instaluar shkronjat përkatëse të kodimit, të cilat ju lejuan të vizatoni bajt nga disku në ekran në atë mënyrë që ato të kenë kuptim për përdoruesin.

Nëse keni printuar një skedar teksti në një printer dhe keni parë një grup krakozyabr të pakuptueshëm në një faqe letre, kjo do të thoshte që fontet përkatëse nuk ishin ngarkuar në printer dhe nuk i interpretonte bajtet ashtu siç dëshironi.

Kjo qasje në përgjithësi dhe kodimet me një bajt në veçanti kishin një numër të metash domethënëse:

  1. Ishte e mundur të punohej njëkohësisht me vetëm 256 karaktere, dhe 128 të parët ishin të rezervuar për karaktere latine dhe kontrolluese, dhe në gjysmën e dytë, përveç karaktereve të alfabetit kombëtar, ishte e nevojshme të gjendej një vend për karaktere pseudografike ( ╔ ╗).
  2. Fontet ishin të lidhura me një kodim specifik.
  3. Secili kodim përfaqësonte grupin e vet të karaktereve, dhe konvertimi nga njëri në tjetrin ishte i mundur vetëm me humbje të pjesshme, kur karakteret që mungonin u zëvendësuan me ato grafikisht të ngjashme.
  4. Transferimi i skedarëve midis pajisjeve me sisteme të ndryshme operative ishte i vështirë. Ishte e nevojshme ose të kishte një program konvertues, ose të mbante fonte shtesë së bashku me skedarin. Ekzistenca e internetit siç e dimë ishte e pamundur.
  5. Në botë ekzistojnë sisteme shkrimi jo-alfabetike (shkrimi hieroglifik), të cilët në parim nuk mund të përfaqësohen në një kodim me një bajt.

Bazat e Unicode

Të gjithë e kuptojmë mirë se kompjuteri nuk di për asnjë entitet ideal, por funksionon me bit dhe bajt. Por sistemet kompjuterike ende krijohen nga njerëzit, jo nga makinat, dhe ndonjëherë është më e përshtatshme për mua dhe ju të veprojmë me koncepte spekulative dhe më pas të kalojmë nga abstraktja në konkrete.

E rëndësishme! Një nga parimet qendrore në filozofinë e Unicode është një dallim i qartë midis karaktereve, paraqitjes së tyre në një kompjuter dhe shfaqjes së tyre në një pajisje dalëse.

Prezantohet koncepti i një karakteri abstrakt Unicode, i cili ekziston vetëm në formën e një koncepti dhe marrëveshjeje spekulative midis njerëzve, të fiksuar nga standardi. Secilit karakter Unicode i caktohet një numër i plotë jo negativ i quajtur pika e tij e kodit.

Kështu, për shembull, karakteri Unicode U+041F është shkronja e madhe cirilike P. Ka disa mënyra për ta paraqitur këtë karakter në kujtesën e kompjuterit, ashtu si disa mijëra mënyra për ta shfaqur atë në ekranin e monitorit. Por në të njëjtën kohë P, do të jetë P ose U + 041F në Afrikë.

Ky është kapsulimi ose ndarja e njohur e ndërfaqes nga zbatimi - një koncept që e ka provuar veten në programim.

Rezulton se, i udhëhequr nga standardi, çdo tekst mund të kodohet si një sekuencë karakteresh Unicode

Përshëndetje U+041F U+0440 U+0438 U+0432 U+0435 U+0442

shkruajeni në një copë letër, paketoni në një zarf dhe dërgojeni në çdo pjesë të Tokës. Nëse ata dinë për ekzistencën e Unicode, atëherë teksti do të perceptohet prej tyre në të njëjtën mënyrë si ne me ju. Ata nuk do të kenë as dyshimin më të vogël se personazhi i parafundit është pikërisht germa e vogël cirilike e(U+0435) në vend që të thoni latinisht të vogla e(U+0065). Vini re se ne nuk thamë asnjë fjalë për përfaqësimin e bajtit.

Hapësira e kodit Unicode

Hapësira e kodit Unicode përbëhet nga 1,114,112 pika kodi që variojnë nga 0 në 10FFFF. Prej tyre, vetëm 128,237 u janë caktuar vlera nga versioni i nëntë i standardit. Një pjesë e hapësirës është e rezervuar për përdorim privat dhe Konsorciumi Unicode premton të mos caktojë kurrë vlera për pozicionet nga këto zona të veçanta.

Për hir të lehtësisë, e gjithë hapësira është e ndarë në 17 avionë (gjashtë prej tyre aktualisht janë të përfshirë). Deri kohët e fundit, ishte zakon të thuhej se ka shumë të ngjarë që do t'ju duhet të merreni vetëm me Planin Basic Multilingual (BMP), i cili përfshin karaktere Unicode nga U+0000 në U+FFFF. (Duke vazhduar pak: karakteret nga BMP përfaqësohen në UTF-16 nga dy bajt, jo me katër). Në vitin 2016, kjo tezë tashmë është në dyshim. Kështu, për shembull, karakteret e njohura Emoji mund të gjenden në një mesazh përdoruesi dhe ju duhet të jeni në gjendje t'i përpunoni ato në mënyrë korrekte.

Kodimet

Nëse duam të dërgojmë tekst përmes internetit, atëherë duhet të kodojmë një sekuencë karakteresh Unicode si një sekuencë bajtash.

Standardi Unicode përfshin një përshkrim të një numri kodimesh Unicode, të tilla si UTF-8 dhe UTF-16BE/UTF-16LE, të cilat lejojnë të kodohet e gjithë hapësira e pikave të kodit. Konvertimi midis këtyre kodimeve mund të kryhet lirisht pa humbje informacioni.

Gjithashtu, askush nuk ka anuluar kodimet me një bajt, por ato ju lejojnë të kodoni pjesën tuaj individuale dhe shumë të ngushtë të spektrit Unicode - 256 ose më pak pozicione kodi. Për kodime të tilla, tabelat ekzistojnë dhe janë të disponueshme për të gjithë, ku çdo vlerë e një bajt të vetëm shoqërohet me një karakter Unicode (shih, për shembull, CP1251.TXT). Pavarësisht kufizimeve, kodimet me një bajt rezultojnë të jenë shumë praktike kur bëhet fjalë për të punuar me një grup të madh informacionesh tekstuale njëgjuhëshe.

Nga kodimet Unicode në internet, UTF-8 është më i zakonshmi (ai fitoi pëllëmbën në 2008), kryesisht për shkak të ekonomisë dhe pajtueshmërisë transparente me ASCII shtatë-bitësh. Simbolet latine dhe të shërbimit, shenjat dhe numrat bazë të pikësimit - d.m.th. të gjithë karakteret ASCII shtatë-bitësh janë të koduar në UTF-8 me një bajt, njësoj si në ASCII. Simbolet e shumë shkrimeve bazë, përveç disa karaktereve hieroglifike më të rralla, përfaqësohen në të me dy ose tre bajt. Më i madhi nga pozicionet e kodit të përcaktuar nga standardi - 10FFFF - është i koduar me katër bajt.

Vini re se UTF-8 është një kodim me gjatësi të ndryshueshme. Çdo karakter Unicode në të përfaqësohet nga një sekuencë kuante kodi me një gjatësi minimale prej një kuante. Numri 8 nënkupton gjatësinë e bitit të kuantit të kodit (njësia e kodit) - 8 bit. Për familjen e kodimit UTF-16, madhësia e kuantit të kodit është, përkatësisht, 16 bit. Për UTF-32 - 32 bit.

Nëse po dërgoni një faqe HTML me tekst cirilik në rrjet, atëherë UTF-8 mund të japë një përfitim shumë të prekshëm, sepse. të gjitha shënimet, si dhe blloqet JavaScript dhe CSS, do të kodohen në mënyrë efektive në një bajt. Për shembull, faqja kryesore e Habr në UTF-8 merr 139 Kb, dhe në UTF-16 është tashmë 256 Kb. Për krahasim, nëse përdorni win-1251 me humbjen e aftësisë për të ruajtur disa karaktere, atëherë madhësia do të reduktohet me vetëm 11 Kb.

Enkodimet Unicode 16-bit përdoren shpesh për të ruajtur informacionin e vargjeve në aplikacione për shkak të thjeshtësisë së tyre, si dhe për faktin se karakteret e sistemeve kryesore të shkrimit në botë janë të koduara në një kuantë gjashtëmbëdhjetë-bitësh. Kështu, për shembull, Java përdor me sukses UTF-16 për paraqitjen e brendshme të vargjeve. Sistemi operativ Windows nga brenda përdor gjithashtu UTF-16.

Në çdo rast, për sa kohë që qëndrojmë në hapësirën Unicode, nuk ka shumë rëndësi se si ruhet informacioni i vargut brenda një aplikacioni të vetëm. Nëse formati i ruajtjes së brendshme ju lejon të kodoni saktë të gjitha më shumë se një milion pozicionet e kodit dhe nuk ka humbje informacioni në kufirin e aplikacionit, për shembull, kur lexoni nga një skedar ose kopjoni në kujtesën e fragmenteve, atëherë gjithçka është në rregull.

Për të interpretuar saktë tekstin e lexuar nga një disk ose prizë rrjeti, së pari duhet të përcaktoni kodimin e tij. Kjo bëhet ose duke përdorur meta-informacion të dhënë nga përdoruesi të shkruar brenda ose pranë tekstit, ose të përcaktuar në mënyrë heuristike.

Në lëndën e thatë

Ka shumë informacione dhe ka kuptim të japim një përmbledhje të shkurtër të gjithçkaje që u shkrua më lart:

  • Unicode postulon një dallim të qartë midis karaktereve, paraqitjes së tyre në një kompjuter dhe shfaqjes së tyre në një pajisje dalëse.
  • Hapësira e kodit Unicode përbëhet nga 1,114,112 pika kodi që variojnë nga 0 në 10FFFF.
  • Plani bazë shumëgjuhësh përfshin karakteret Unicode U+0000 deri në U+FFFF, të cilat janë të koduara në UTF-16 si dy bajt.
  • Çdo kodim Unicode ju lejon të kodoni të gjithë hapësirën e pozicioneve të kodit Unicode, dhe konvertimi midis kodimeve të tilla të ndryshme kryhet pa humbje informacioni.
  • Kodimet me një bajt kodojnë vetëm një pjesë të vogël të spektrit Unicode, por mund të jenë të dobishme kur punoni me një sasi të madhe informacioni njëgjuhësh.
  • Kodimet UTF-8 dhe UTF-16 kanë gjatësi kodi të ndryshueshme. Në UTF-8, çdo karakter Unicode mund të kodohet si një, dy, tre ose katër bajt. Në UTF-16, dy ose katër bajt.
  • Formati i brendshëm për ruajtjen e informacionit tekstual brenda një aplikacioni të veçantë mund të jetë arbitrar, me kusht që të funksionojë saktë me të gjithë hapësirën e pozicioneve të kodit Unicode dhe të mos ketë humbje gjatë transferimit të të dhënave ndërkufitare.

Një shënim i shpejtë rreth kodimit

Mund të ketë një konfuzion me termin kodim. Brenda Unicode, kodimi ndodh dy herë. Herën e parë që kodohet një grup karakteresh Unicode (bashkësi karakteresh), në kuptimin që çdo karakteri Unicode i caktohet një pozicion kodi përkatës. Si pjesë e këtij procesi, grupi i karaktereve Unicode konvertohet në një grup karakteresh të koduar. Herën e dytë që sekuenca e karaktereve unicode konvertohet në një varg bajt, ky proces quhet edhe kodim.

Në terminologjinë angleze, ekzistojnë dy folje të ndryshme për të koduar dhe për të koduar, por edhe folësit amtare shpesh ngatërrohen në to. Për më tepër, termi grup karakteresh ose grup karakteresh përdoret si sinonim për termin grup karakteresh të koduara.

Të gjitha këto i themi për faktin se ka kuptim t'i kushtohet vëmendje kontekstit dhe të bëhet dallimi midis situatave kur bëhet fjalë për pozicionin e kodit të një karakteri abstrakt Unicode dhe kur bëhet fjalë për paraqitjen e tij të bajtit.

Së fundi

Ka kaq shumë aspekte të ndryshme të Unicode sa është e pamundur të mbulohen gjithçka në një artikull. Po, dhe e panevojshme. Informacioni i mësipërm është mjaft i mjaftueshëm për të mos u ngatërruar në parimet bazë dhe për të punuar me tekstin në shumicën e detyrave të përditshme (lexo: pa shkuar përtej BMP). Në artikujt e mëposhtëm, ne do të flasim për normalizimin, do të japim një përmbledhje më të plotë historike të zhvillimit të kodimeve, do të flasim për problemet e terminologjisë së Unicode në gjuhën ruse dhe gjithashtu do të bëjmë materiale për aspektet praktike të përdorimit të UTF-8 dhe UTF- 16.

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

Unicode është një grup karakteresh grafike dhe një mënyrë për t'i koduar ato për përpunimin kompjuterik të të dhënave të tekstit.

Unicode jo vetëm që cakton një kod unik për çdo karakter, por gjithashtu përcakton karakteristika të ndryshme të atij karakteri, për shembull:

    lloji i karakterit (shkronja e madhe, shkronja e vogël, numri, shenja e pikësimit, etj.);

    atributet e karaktereve (ekrani nga e majta në të djathtë ose nga e djathta në të majtë, hapësira, ndërprerja e rreshtit, etj.);

    germa përkatëse e madhe ose e vogël (përkatësisht për shkronjat e vogla dhe të mëdha);

    vlerën numerike përkatëse (për karakteret numerike).

    Standardet UTF(shkurtesa për Unicode Transformation Format) për të përfaqësuar karakteret:

UTF-16: Windows Setup, Acceleration, Vista FAQ përdor kodimin UTF-16 për të përfaqësuar të gjithë karakteret e Unicode. Në UTF-16, karakteret përfaqësohen nga dy bajt (16 bit). Ky kodim përdoret në Windows sepse vlerat 16-bit mund të përfaqësojnë karakteret që përbëjnë alfabetet e shumicës së gjuhëve në botë, kjo i lejon programet të përpunojnë vargjet më shpejt dhe të llogarisin gjatësinë e tyre. Megjithatë, 16 bit nuk mjaftojnë për të përfaqësuar karakteret alfabetike në disa gjuhë. Për raste të tilla, UTE-16 mbështet kodimet "zëvendësuese", duke lejuar që karakteret të kodohen në 32 bit (4 byte). Megjithatë, ka pak aplikacione që kanë të bëjnë me karakteret e gjuhëve të tilla, kështu që UTF-16 është një kompromis i mirë midis kursimit të memories dhe lehtësisë së programimit. Vini re se në .NET Framework, të gjithë karakteret janë të koduara duke përdorur UTF-16, kështu që përdorimi i UTF-16 në aplikacionet Windows përmirëson performancën dhe redukton konsumin e kujtesës kur kalon vargjet midis kodit vendas dhe të menaxhuar.

UTF-8: Në kodimin UTF-8, karaktere të ndryshme mund të përfaqësohen me 1,2,3 ose 4 bajt. Karakteret me vlera më të vogla se 0x0080 janë të ngjeshur në 1 bajt, gjë që është shumë e përshtatshme për karakteret amerikane. Karakteret që përputhen me vlerat në rangun 0x0080-0x07FF konvertohen në vlera 2-bajtë, gjë që funksionon mirë me alfabetet evropiane dhe të Lindjes së Mesme. Karakteret me vlera më të mëdha konvertohen në vlera 3-byte, të cilat janë të përshtatshme kur punoni me gjuhët e Azisë Qendrore. Së fundi, çiftet "zëvendësuese" shkruhen në formatin 4 bajt. UTF-8 është një kodim jashtëzakonisht popullor. Sidoqoftë, është më pak efektiv se UTF-16 nëse përdoren shpesh karaktere me vlera 0x0800 ose më të larta.

UTF-32: Në UTF-32, të gjithë karakteret përfaqësohen nga 4 bajt. Ky kodim është i përshtatshëm për të shkruar algoritme të thjeshta për numërimin e karaktereve të çdo gjuhe që nuk kërkojnë përpunimin e karaktereve të përfaqësuara nga numra të ndryshëm bajtësh. Për shembull, kur përdorni UTF-32, mund të harroni "zëvendësuesit", pasi çdo karakter në këtë kodim përfaqësohet nga 4 bajt. Është e qartë se UTF-32 është larg idealit për sa i përket përdorimit të memories. Prandaj, ky kodim përdoret rrallë për të transferuar vargje në rrjet dhe për t'i ruajtur ato në skedarë. Si rregull, UTF-32 përdoret si një format i brendshëm për paraqitjen e të dhënave në një program.

UTF-8

Në të ardhmen e afërt, u thirr një format i veçantë Unicode (dhe ISO 10646). UTF-8. Ky kodim "derivativ" përdoret për të shkruar karaktere në vargje bajtesh me gjatësi të ndryshme (nga një në gjashtë), të cilat shndërrohen në kode Unicode duke përdorur një algoritëm të thjeshtë, me vargje më të shkurtra që korrespondojnë me karaktere më të zakonshme. Avantazhi kryesor i këtij formati është përputhshmëria me ASCII jo vetëm për sa i përket vlerave të kodit, por edhe për sa i përket numrit të biteve për karakter, pasi një bajt është i mjaftueshëm për të koduar ndonjë nga 128 karakteret e para në UTF-8 (megjithëse, për shembull, shkronjat cirilike kanë nevojë për dy bajt).

Formati UTF-8 u shpik më 2 shtator 1992 nga Ken Thompson dhe Rob Pike dhe u zbatua në Planin 9. Tani standardi UTF-8 është përfshirë zyrtarisht në dokumentet RFC 3629 dhe ISO / IEC 10646 Aneksi D.

Për dizajnerin e uebit, ky kodim është i një rëndësie të veçantë, pasi është shpallur "kodimi standard i dokumentit" në HTML që nga versioni 4.

Teksti që përbëhet vetëm nga karaktere më pak se 128 konvertohet në tekst të thjeshtë ASCII kur shkruhet në UTF-8. Anasjelltas, në tekstin UTF-8, çdo bajt me vlerë më të vogël se 128 përfaqëson një karakter ASCII me të njëjtin kod. Karakteret e mbetura të Unicode përfaqësohen si sekuenca prej 2 deri në 6 bajte në gjatësi (në fakt vetëm deri në 4 bajt, pasi kodet më të mëdha se 221 nuk janë planifikuar), në të cilat bajt i parë është gjithmonë 11xxxxxx, dhe pjesa tjetër është 10xxxxxx.

E thënë thjesht, në UTF-8, karakteret latine, shenjat e pikësimit dhe karakteret e kontrollit ASCII shkruhen si kode US-ASCII, dhe të gjithë karakteret e tjera kodohen duke përdorur disa oktete me bitin më domethënës të 1. Kjo ka dy efekte.

    Edhe nëse programi nuk e njeh Unicode, atëherë shkronjat latine, numrat arabë dhe shenjat e pikësimit do të shfaqen saktë.

    Në rast se shkronjat latine dhe shenjat më të thjeshta të pikësimit (përfshirë hapësirën) zënë një sasi të konsiderueshme teksti, UTF-8 jep një fitim në vëllim në krahasim me UTF-16.

    Në shikim të parë, mund të duket se UTF-16 është më i përshtatshëm, pasi shumica e karaktereve në të janë të koduara saktësisht në dy bajt. Megjithatë, kjo mohohet nga nevoja për të mbështetur çiftet zëvendësuese, të cilat shpesh harrohen kur përdorin UTF-16, duke zbatuar vetëm mbështetje për karakteret UCS-2.

Standardi u propozua në 1991 nga organizata jofitimprurëse Unicode Consortium (English Unicode Consortium, Unicode Inc.). Përdorimi i këtij standardi bën të mundur kodimin e një numri shumë të madh karakteresh nga skriptet e ndryshme: karakteret kineze, simbolet matematikore, shkronjat e alfabetit grek, alfabetet latine dhe cirilike mund të bashkëjetojnë në dokumentet Unicode, ndërsa ndërrimi i faqeve të kodit bëhet i panevojshëm.

Standardi përbëhet nga dy seksione kryesore: grupi universal i karaktereve (UCS, grup karakteresh universal) dhe familja e kodimit (UTF, formati i transformimit Unicode). Kompleti universal i karaktereve specifikon një korrespondencë një-për-një të karaktereve me kodet - elementë të hapësirës së kodit që përfaqësojnë numra të plotë jo negativë. Një familje kodimi përcakton paraqitjen e makinës të një sekuence kodesh UCS.

Standardi Unicode u zhvillua me qëllimin e krijimit të një kodimi të vetëm karakteresh për të gjitha gjuhët e shkruara moderne dhe shumë të lashta. Çdo karakter në këtë standard është i koduar me 16 bit, gjë që e lejon atë të mbulojë një numër pakrahasueshëm më të madh karakteresh sesa kodimet 8-bitëshe të pranuara më parë. Një tjetër ndryshim i rëndësishëm midis Unicode dhe sistemeve të tjera të kodimit është se ai jo vetëm që cakton një kod unik për çdo karakter, por gjithashtu përcakton karakteristika të ndryshme të atij karakteri, për shembull:

Lloji i karakterit (shkronja e madhe, shkronja e vogël, numri, shenja e pikësimit, etj.);

Atributet e karaktereve (shfaqja nga e majta në të djathtë ose nga e djathta në të majtë, hapësira, ndërprerja e rreshtit, etj.);

Shkronjat përkatëse të mëdha ose të vogla (përkatësisht për shkronjat e vogla dhe të mëdha);

Vlera numerike përkatëse (për karakteret numerike).

I gjithë diapazoni i kodeve nga 0 në FFFF është i ndarë në disa nëngrupe standarde, secila prej të cilave korrespondon ose me alfabetin e një gjuhe, ose me një grup karakteresh të veçanta që janë të ngjashme në funksionet e tyre. Diagrami më poshtë përmban një listë të përgjithshme të nëngrupeve të Unicode 3.0 (Figura 2).

Figura 2

Standardi Unicode është baza për ruajtjen dhe tekstin në shumë sisteme kompjuterike moderne. Megjithatë, ai nuk është i pajtueshëm me shumicën e protokolleve të internetit, sepse kodet e tij mund të përmbajnë çdo vlerë bajt, dhe protokollet zakonisht përdorin bajt 00 - 1F dhe FE - FF si bajt shërbimi. Për të arritur pajtueshmërinë, janë zhvilluar disa formate të transformimit të Unicode (UTF, Unicode Transformation Formats), nga të cilat UTF-8 është më i zakonshmi sot. Ky format përcakton rregullat e mëposhtme për konvertimin e çdo kodi Unicode në një grup bajtësh (nga një në tre) të përshtatshëm për transport me protokollet e internetit.


Këtu x, y, z tregojnë pjesët e kodit burimor, të cilët duhet të nxirren, duke filluar nga më i riu, dhe të futen në bajtet e rezultatit nga e djathta në të majtë, derisa të plotësohen të gjitha pozicionet e specifikuara.

Zhvillimi i mëtejshëm i standardit Unicode shoqërohet me shtimin e planeve të reja gjuhësore, d.m.th. karaktere në intervalet 10000 - 1FFFF, 20000 - 2FFFF, etj., ku supozohet të përfshijë kodimin për skriptet e gjuhëve të vdekura që nuk përfshihen në tabelën e mësipërme. Një format i ri UTF-16 u zhvillua për të koduar këto karaktere shtesë.

Kështu, ekzistojnë 4 mënyra kryesore për të koduar bajt në formatin Unicode:

UTF-8: 128 karaktere të koduara në një bajt (format ASCII), 1920 karaktere të koduara në 2 bajt ((shkronja romake, greke, cirilike, kopte, armene, hebraike, arabe), 63488 karaktere të koduara në 3 bajt (kineze, japoneze etj. .) 2,147,418,112 karakteret e mbetura (jo të përdorura ende) mund të kodohen me 4, 5 ose 6 bajt.

UCS-2: Çdo karakter përfaqësohet nga 2 bajt. Ky kodim përfshin vetëm 65,535 karakteret e para nga formati Unicode.

UTF-16: Ky është një zgjerim i UCS-2 dhe përfshin 1,114,112 karaktere Unicode. 65.535 karakteret e para përfaqësohen me 2 bajt, pjesa tjetër me 4 bajt.

USC-4: Çdo karakter është i koduar me 4 bajt.

Artikujt kryesorë të lidhur