Հիմնական նյութ
Դասընթաց․ (Համակարգիչներ և համացանցը) > Բաժին 1
Դաս 5: Տեքստի պահեստավորումը երկուական համակարգումՏեքստի պահեստավորումը երկուական համակարգում
Համակարգիչները երկուական համակարգով պահում են ավելին, քան պարզապես թվեր: Բայց ինչպե՞ս կարող են երկուական համակարգի թվերը ներկայացնել ոչ թվերը, ինչպիսիք են տառերը և նշանները:
Ինչպես պարզվում է, դրա համար անհրաժեշտ է ընդամենը մի փոքր մարդկային ներգործություն: Մենք պետք է պայմանավորվենք կոդավորումների և նիշից երկուական համակարգի թվի քարտեզագրման վերաբերյալ:
Պարզ կոդավորում
Օրինակ, ի՞նչ կլիներ, եթե մենք ցանկանայինք պահպանել հետևյալ նշանները երկուական համակարգով.
☮️❤️😀
Մենք կարող ենք հորինել հետևյալ կոդավորումը․
Երկուական համակարգի թվեր | Սիմվոլ |
---|---|
☮️ | |
❤️ | |
😀 |
Եկեք այն անվանենք HPE (Hewlett Packard Enterprise) կոդավորում: Այն օգնում է, որ կոդավորումներն ունենան անուններ, որպեսզի ծրագրավորողները իմանան, որ օգտագործում են նույն կոդավորումը:
Եթե համակարգչային ծրագրին անհրաժեշտ է պահել ❤️ նշանը համակարգչի հիշողության մեջ, այն կարող է փոխարենը պահել : Երբ ծրագիրը պետք է օգտագործողին ցուցադրի , այն կարող է հիշել HPE կոդավորումը և դրա փոխարեն ցուցադրել ❤️:
Համակարգչային ծրագրերին և ֆայլերին հաճախ անհրաժեշտ է պահել մի քանի նիշեր, ինչը նրանք կարող են անել՝ շարելով յուրաքանչյուր նիշի կոդավորումը:
Ծրագիրը կարող է գրել «msg.hpe» անունով ֆայլ հետևյալ տվյալներով.
Մեկ այլ համակարգչի վրա գտնվող ծրագիրը, որը հասկանում է HPE կոդավորումը, կարող է այնուհետև բացել «msg.hpe» և ցուցադրել նշանների հաջորդականությունը:
HPE կոդավորումն օգտագործում է միայն 2 բիթ, այնպես որ այն սահմանափակում է ներկայացվող նիշերի քանակը:
Այնուամենայնիվ, ավելի շատ բիթերի դեպքում կոդավորումը կարող է ներկայացնել համակարգիչների համար բավականաչափ տառեր՝ հաղորդագրություններ, փաստաթղթեր և վեբ էջեր պահելու համար:
ASCII կոդավորում
ASCII-ն առաջին ստանդարտացված կոդավորումներից մեկն էր: Այն հորինվել է դեռևս 1960-ականներին, երբ հեռագրությունը միջքաղաքային հաղորդակցության հիմնական ձևն էր, բայց մինչ օրս այն օգտագործվում է ժամանակակից հաշվողական համակարգերում:
Հեռագրավարները տպագրում էին հաղորդագրություններ այնպիսի տպիչների վրա, ինչպիսին այս մեկն է:
Այնուհետև հեռագրամեքենան օգտագործում էր ASCII ստանդարտը՝ յուրաքանչյուր տպագրված նիշը երկուական համակարգով կոդավորելու և այնուհետև պահելու կամ երկուական համակարգի տվյալները փոխանցելու համար:
1972 թվականի հեռագրամեքենայի ձեռնարկի այս էջը ցույց է տալիս 128 ASCII կոդերը.
Յուրաքանչյուր ASCII նիշ կոդավորված է երկուական տարբերակով՝ օգտագործելով 7 բիթ: Վերևի աղյուսակում սյունակի վերնագիրը ցույց է տալիս առաջին 3 բիթերը, իսկ տողի վերնագիրը ցույց է տալիս վերջին 4 բիթերը: Հենց առաջին նիշը «NUL» է, որը կոդավորված է որպես .:
Առաջին 32 ծածկագրերը ներկայացնում են "կառավարման նիշեր", որոնք տառ տպելուց բացի որոշակի ազդեցություն են ունենում: "BEL"-ը (կոդավորված երկուական համակարպում որպես ) հնչեցնում էր զանգ կամ ձայնային ազդանշան: "ENQ"-ը (կոդավորված որպես ) ներկայացնում է ընդունող կայանին իրեն ճանաչելու հարցում, խնդրանք։
Կառավարման նիշերը ի սկզբանե նախատեսված էին հեռագրամեքենաների և հեռագրության համար, բայց շատերը վերափոխվել են ժամանակակից համակարգիչների և ինտերնետի համար, հատկապես «CR» և «LF»: «CR»-ը ( ) հեռագրամեքենաներում ներկայացնում էր «փոխադրիչի վերադարձ» հրահանգը՝ տպիչի գլխիկը տեղափոխելով տողի սկիզբ: «LF»-ը ( ) ներկայացնում էր «տողի ավելացում» հարահանգը՝ տպիչի գլխիկը մեկ տողով ներքև տեղափոխելով: Ժամանակակից ինտերնետ պրոտոկոլները, ինչպիսիք են HTTP, FTP և SMTP, օգտագործում են «CR» + «LF» համակցությունը՝ տողերի վերջը ներկայացնելու համար:
Մնացած 96 ASCII նիշերը շատ ավելի ծանոթ են թվում:
Ահա առաջին 8 մեծատառերը.
Երկուական | Նիշ |
---|---|
A | |
B | |
C | |
D | |
E | |
F | |
G | |
H |
Հետևելով ASCII ստանդարտին՝ կարող ենք չորս տառից բաղկացած հաղորդագրություն կոդավորել երկուական համակարգում.
Այնուամենայնիվ, ASCII կոդավորման հետ կապված մի քանի խնդիրներ կան:
Առաջին մեծ խնդիրն այն է, որ ASCII-ը ներառում է միայն տառեր անգլերեն այբուբենից և սահմանափակ թվով նշաններ:
Լեզուն, որն օգտագործում է 128-ից պակաս նիշեր, կարող է ստեղծել ASCII-ի սեփական տարբերակը՝ տեքստը միայն իրենց լեզվով կոդավորելու համար, բայց ի՞նչ կարելի է ասել մի քանի լեզուների նիշերով տեքստային ֆայլի մասին: ASCII-ը չէր կարող կոդավորել այնպիսի տող, ինչպիսին է. "Hello, José, would you care for Glühwein? It costs 10 €"
Իսկ ի՞նչ կասեք հազարավոր լոգոգրամներով լեզուների վերաբերյալ: ASCII-ը չէր կարող կոդավորել բավականաչափ լոգոգրամներ՝ ծածկելու նման չինական նախադասությունը "你好,想要一盘饺子吗?十块钱。"
ASCII կոդավորման մյուս խնդիրն այն է, որ այն օգտագործում է 7 բիթ յուրաքանչյուր նիշ ներկայացնելու համար, մինչդեռ համակարգիչները սովորաբար տեղեկատվությունը պահում են բայթերով՝ 8 բիթանոց միավորներով, և ծրագրավորողները չեն սիրում վատնել հիշողությունը:
Երբ ամենավաղ համակարգիչները առաջին անգամ սկսեցին կոդավորելու համար օգտագործել ASCII նիշերը, տարբեր համակարգիչներ տարբեր եղանակներ էին առաջարկում վերջին բիթն օգտագործելու համար: Օրինակ, HP համակարգիչներն օգտագործում էին ութերորդ բիթը եվրոպական երկրներում օգտագործվող նիշերը ներկայացնելու համար (օրինակ՝ «£» և «Ü»), TRS-80 համակարգիչները՝ գունավոր գրաֆիկայի համար, իսկ Atari համակարգիչները՝ առաջին 128 նիշերը սև ու սպիտակ դարձնելու համար:
Արդյու՞նքը։ Մեկ հավելվածում ստեղծված «ASCII» ֆայլը կարող է նմանվել աճպարարության, երբ բացվի մեկ այլ «ASCII» համատեղելի հավելվածում:
Համակարգիչներին անհրաժեշտ էր նոր կոդավորում՝ 8-բիթանոց բայթերի վրա հիմնված կոդավորում, որը կարող էր ներկայացնել աշխարհի բոլոր լեզուները:
Յունիկոդ
Նախ, քանի՞ նիշ է քեզ անհրաժեշտ աշխարհի լեզուները ներկայացնելու համար: Ո՞ր նիշերն են հիմնականում նույնը տարբեր լեզուներով, նույնիսկ եթե դրանք տարբեր հնչյուններ ունեն:
1987 թվականին մի խումբ համակարգչային ինժեներներ փորձեցին պատասխանել այդ հարցերին։ Նրանք, ի վերջո, ստեղծեցին Unicode-ը՝ ունիվերսալ նիշերի հավաքածու, որը յուրաքանչյուր նիշին տալիս է "կոդային կետ" (տասնվեցական համակարգի թիվ) և անուն:
Օրինակ, "ą" նիշը վերագրված է "U+0105"-ին և անվանվում է "Լատինական փոքրատառ A": 13 լեզուներով, օրինակ՝ լեհերենում և լիտվերենում, կա մի կերպար, որը նման է "ą"-ին: Այսպիսով, ըստ Unicode-ի՝ լեհերեն "robią" բառի "ą"-ը և լիտվերեն "aslą" բառի "ą"-ը երկուսն էլ նույն նիշն են: Յունիկոդը խնայում է տարածությունը՝ միավորելով տարբեր լեզուների նիշերը:
Բայց դեռ բավականին շատ նիշեր կան կոդավորման համար: Յունիկոդի նիշերի հավաքածուն մեկնարկվել է 1991-ին 7129 անվանական նիշերով, իսկ 2019-ին հասել է 137929-ի: Այդ նիշերի մեծամասնությունը նկարագրում է չինարենից, ճապոներենից և կորեերենից լոգոգրամները, օրինակ, "U+6728", որը վերաբերում է "木"-ին: Այն նաև ներառում է ավելի քան 1200 էմոջիներ ("U+1F389" = "🎉"):
Unicode-ը նիշերի հավաքածու է, բայց այն կոդավորում չէ : Բարեբախտաբար, ինժեներների մեկ այլ խումբ լուծեց Unicode-ը երկուականով արդյունավետ կոդավորման խնդիրը:
UTF-8
1992 թվականին համակարգչային գիտնականները հայտնագործեցին UTF-8 կոդավորումը, որը համատեղելի է ASCII կոդավորման հետ, բայց նաև լուծում է դրա խնդիրները:
UTF-8-ը կարող է նկարագրել Unicode ստանդարտի յուրաքանչյուր նիշ՝ օգտագործելով 1, 2, 3 կամ 4 բայթ։
Երբ համակարգչային ծրագիրը կարդում է UTF-8 տեքստային ֆայլ, այն գիտի, թե քանի բայթ է ներկայացնում հաջորդ նիշը՝ հիմնվելով, թե քանի
1
բիթ է գտնում բայթի սկզբում:Բայթերի քանակը | Բայթ 1 | Բայթ 2 | Բայթ 3 | Բայթ 4 |
---|---|---|---|---|
1 | 0xxxxxxx | |||
2 | 110xxxxx | 10xxxxxx | ||
3 | 1110xxxx | 10xxxxxx | 10xxxxxx | |
4 | 11110xxx | 10xxxxxx | 10xxxxxx | 10xxxxxx |
Եթե առաջին բիթում չկա
1
(եթե առաջին բիթը 0
է), դա ցույց է տալիս մեկ բայթով ներկայացված նիշ: Բայթի մնացած 7 բիթերն օգտագործվում են բնօրինակ 128 ASCII նիշերը ներկայացնելու համար: Դա նշանակում է, որ 8-բիթանոց ASCII նիշերի հաջորդականությունը նույնպես վավեր UTF-8 հաջորդականություն է:110
-ով սկսվող երկու բայթ օգտագործվում է լատինատառ լեզուներից մնացած նիշերը կոդավորելու համար (օրինակ՝ իսպաներեն, գերմաներեն) և այլ լեզուներից, ինչպիսիք են հունարենը, եփրայերենը և արաբերենը: 1110
-ով սկսվող երեք բայթ կոդավորում է ասիական լեզուների (օրինակ՝ չինարեն, ճապոներեն, կորեերեն) նիշերի մեծ մասը: Չորս բայթ, որոնք սկսվում են 11110
-ով, կոդավորում են մնացած ամեն ինչ՝ սկսած հազվադեպ օգտագործվող պատմական գրերից մինչև ավելի հաճախակի օգտագործվող էմոջիները:Ծրագրավորման ժամանակակից լեզուների մեծամասնություն աջակցվում է UTF-8-ով, ուստի ծրագրավորողների մեծամասնությունը երբեք կարիք չունի հստակ իմանալու, թե ինչպես փոխարկել նիշերը երկուական համակարգում:
✏️ Փորձեք օգտագործել JavaScript՝ ստորև բերված ձևով UTF-8 տողերը կոդավորելու համար: Խաղացեք բազմաթիվ լեզուներով և սիմվորներով:
UTF-8 կոդավորման ստանդարտն այժմ համացանցում HTML ֆայլերի գերիշխող կոդավորումն է և 2019 թվականի դեկտեմբերի դրությամբ կազմում է վեբէջերի 94,5%-ը։
🔎 Եթե հենց հիմա մկնիկի աջ կոճակը սեղմես (աջ քլիք) և ընտրես "view page source" (դիտել էջի աղբյուրը), կարող ես որոնել «utf-8» տողը և տեսնել, որ այս վեբ էջը կոդավորված է UTF-8-ով:
Ընդհանրապես, լավ կոդավորումն այն է, որը կարող է քիչ թվով բիթերով ներկայացնել տեղեկատվության առավելագույն քանակ: UTF-8-ը դրա հիանալի օրինակն է, քանի որ թեև այն կարող է կոդավորել ընդհանուր անգլերեն տառերը ընդամենը 1 բայթով, բայց բավական ճկուն է՝ հազարավոր տառեր լրացուցիչ բայթերով կոդավորելու համար:
Այնուամենայնիվ, UTF-8-ը հնարավոր կոդավորումներից մեկն է: UTF-16-ը և UTF-32-ը այլընտրանքային կոդավորումներ են, որոնք նույնպես կարող են նաև ներկայացնել Unicode-ի բոլոր նիշերը: Կան նաև լեզվի հատուկ կոդավորումներ, ինչպիսիք են Shift-JIS-ը ճապոներենի համար: Համակարգչային ծրագրերը կարող են օգտագործել այն կոդավորումը, որը լավագույնս համապատասխանում է իրենց կարիքներին և սահմանափակումներին:
🙋🏽🙋🏻♀️🙋🏿♂️Ունե՞ք հարցեր այս թեմայի վերաբերյալ: Մենք կցանկանայինք պատասխանել, պարզապես հարցրեք ստորև ներկայացված հարցերի տարածքում:
Ուզո՞ւմ ես միանալ խոսակցությանը։
Առայժմ հրապարակումներ չկան։